首页 > 编程语言 > 详细

6、spring注解学习——使用spring提供的FactoryBean(工厂bean)注入组件

时间:2020-03-07 23:37:53      阅读:113      评论:0      收藏:0      [点我收藏+]

1、创建一个Color类

技术分享图片

 

 

 2、再创建自定义工厂类(实现FactoryBean接口)

//创建一个spring定义的FactoryBean
public class ColorFactoryBean implements FactoryBean<Color> {
    
    //返回一个Color对象,这个对象会添加到容器中
    @Override
    public Color getObject() throws Exception {
        return new Color();
    }

    @Override
    public Class<?> getObjectType() {
        return Color.class;        //返回对象的类型
    }
    
    //设置这个返回的bean是单例还是多例,true:单例;false:多例
    @Override
    public boolean isSingleton() {
        return true;
    }

}

3、在spring配置类中注入自定义的工厂类

@Configuration        //告诉Spring这是配置类
public class MainConfig {
    
    /*
     * 这里注入的是colorFactoryBean
     * 在容器中通过id为colorFactoryBean获得bean时为该工厂的getObject返回的对象
     * 如果想获得这个工厂bean,则需要在查询时的id前面加一个&,即&colorFactoryBean
     */
    @Bean("colorFactoryBean")
    public ColorFactoryBean colorFactoryBean() {
        return new ColorFactoryBean();
    }
}

4、进行测试

    /**
     * 测试通过FactoryBean方式注入组件
     */
    @Test
    public void test03() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
        Object bean = applicationContext.getBean("colorFactoryBean");
        System.out.println("bean的类型:"+bean.getClass());
    }

输出结果:

技术分享图片

因为查询id为 colorFactoryBean所以默认是获取colorFactoryBean的getObject返回的对象,所以返回对象类型是com.atguigu.bean.Color

若就是想获得这个colorFactoryBean工厂bean,则在查询id前加一个&

即测试方法改为:

    /**
     * 测试通过FactoryBean方式注入组件
     */
    @Test
    public void test03() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
        Object bean = applicationContext.getBean("&colorFactoryBean");
        System.out.println("bean的类型:"+bean.getClass());
    }

输出结果为:

技术分享图片

 

 

 加&后获得的是com.atguigu.bean.ColorFactoryBean

 

再修改测试方法

    /**
     * 测试通过FactoryBean方式注入组件
     */
    @Test
    public void test03() {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
        Object bean1 = applicationContext.getBean("colorFactoryBean");
        Object bean2 = applicationContext.getBean("colorFactoryBean");
        System.out.println(bean1 == bean2);
    }

输出技术分享图片

 

 

 因为在colorFactoryBean里面的isSingleton方法返回的是true,所以获得的对象是单例的

6、spring注解学习——使用spring提供的FactoryBean(工厂bean)注入组件

原文:https://www.cnblogs.com/lyh233/p/12439135.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!