Spring FactoryBean和BeanFactory
阿新 • • 發佈:2020-08-06
1、BeanFactory 是ioc容器的底層實現介面,是ApplicationContext 頂級介面
spring不建議我們直接操作 BeanFactory bean工廠,開發者人建議使用ApplicationContext,它繼承多個介面,其中包括BeanFactory
在ioc容器介面中提供諸如重新整理、載入、關閉等介面方法
FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext 是用來讀取xml檔案建立bean物件 ClassPathXmlApplicationContext : 讀取類路徑下xml 建立bean FileSystemXmlApplicationContext : 讀取檔案系統下xml建立bean AnnotationConfigApplicationContext 主要是註解開發獲取ioc中的bean例項
2、FactoryBean 是spirng提供的工廠bean的一個介面,用於根據傳入的泛型生成各種bean
FactoryBean 介面提供三個方法,用來建立物件,
FactoryBean 具體返回的物件是由getObject 方法決定的。
public interface FactoryBean<T> { String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType"; @Nullable T getObject() throws Exception; @Nullable Class<?> getObjectType();default boolean isSingleton() { return true; } }
建立一個FactoryBean 用來生產User的bean物件
@Component public class FactoryBeanTest implements FactoryBean<User> { //建立的具體bean物件的型別 @Override public Class<?> getObjectType() { return User.class; } @Overridepublic boolean isSingleton() { return true; } //工廠bean 具體建立具體物件是由此getObject()方法來返回的 @Override public User getObject() throws Exception { return new User(); } } @RunWith(SpringRunner.class) @SpringBootTest(classes = {FactoryBeanTest.class}) @WebAppConfiguration public class SpringBootDemoApplicationTests { @Autowired private ApplicationContext applicationContext; @Test public void tesst() { FactoryBeanTest bean1 = applicationContext.getBean(FactoryBeanTest.class); try { User object = bean1.getObject(); System.out.println(object==object); System.out.println(object); } catch (Exception e) { e.printStackTrace(); } } }