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();
            }
        }
    }
  • 相关阅读:
    c# Chart 服务器端动态创建ChartArea
    解决 ASP.NET Chart 控件出错 为 ChartImg.axd 执行子请求时出错
    C# Chart控件,chart、Series、ChartArea曲线图绘制的重要属性
    JSON和JS对象之间的互转
    MAC OS下使用OpenSSL生成私钥和公钥的方法
    iOS 牛人技术博客分享
    iOS开发之头像裁剪
    iOS开发之使用CALayer封装下载进度条
    iOS开发之使用UIimage+ImageEffects实现图片模糊效果
    我的第一个开源项目(Auditory)
  • 原文地址:https://www.cnblogs.com/asker009/p/13445376.html
Copyright © 2011-2022 走看看