1、FactoryBean與BeanFactory之間的區別
BeanFactory:是spring中底層工廠類,getBean()方法最好的解釋
FactoryBean:如果自己的類中實現了FactoryBean會實現三個方法,其中會有一個Object getObject();直接上代碼。
package com.bean; import org.springframework.stereotype.Component; @Component public class TestBean { public void testBean(){ System.out.println("TestBean"); } }
package com.bean; import org.springframework.beans.factory.FactoryBean; import org.springframework.stereotype.Component; @Component("bean_Factory") public class TestBeanFactory implements FactoryBean { public void testBeanFactory(){ System.out.println("TestBeanFactory"); } @Override public Object getObject() throws Exception { return new TestBean(); } @Override public Class<?> getObjectType() { return TestBean.class; } }
AnnotationConfigApplicationContext acc = new AnnotationConfigApplicationContext(Appconfig.class); TestBeanFactory testBeanFactory = (TestBeanFactory)acc.getBean("&bean_Factory" ); testBeanFactory.testBeanFactory(); TestBean testBean = (TestBean)acc.getBean("bean_Factory" ); testBean.testBean();
根據以上代碼(主要測試中),我們可以看出bean_Factory和&bean_Factory返回兩種不同的bean對象,所以得出以下結論
結論:當實現了FactoryBean接口後,再容器中會註冊兩個對象,一個是getObject()方法返回的對象和自身對象。我們定義的名字@Component("xxx"),從容器中獲取的是getObject()方法返回的對象,而&xxx返回的是自身對象
爲什麼這樣設計?使用場景?
此方式用來提供給複雜的第三方,否則,第三方依賴的太多,如果是xml方式那麼將是一種災難,所以引出FactoryBean.getObject();