zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
  • 相关阅读:
    vim 学习笔记系列(前言)
    12306网站推出图片验证 反破解
    如何提升电脑的速度(五年时间收集各家精华,绝对史上最全)
    电脑维修和维护 毕业总结及经验报告
    留学生 电脑安全与维护手册 (留学须知)
    Progress数据库配置与应用
    润乾报表与DERBY数据库的创建连接详解
    图形报表部署在Linux下出现乱码解决办法
    sqlserver为数据库表增加自增字段
    五种常用web服务器jvm参数设置
  • 原文地址:https://www.cnblogs.com/asker009/p/13445376.html
Copyright © 2011-2022 走看看