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

 

posted @ 2020-08-06 11:50  我是属车的  阅读(287)  评论(0编辑  收藏  举报