1. 程式人生 > 實用技巧 >Spring FactoryBean和BeanFactory

Spring FactoryBean和BeanFactory

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;
    }

  
    @Override
    
public 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(); } } }