FactoryBean解析

栏目: Java · 发布时间: 5年前

  • 简单的说FactoryBean实际上是一个Bean,并不是一个工厂,它能够为我们创建一个Bean,但是创建的这个Bean实际指向的并不是FactoryBean类型的,而是其中 getObject 方法返回类型的对象。

接口解析

  • FactoryBean中有三个需要实现的方法,如下:
    getObject()
    public Class<?> getObjectType()
    public boolean isSingleton()
    

自定义实现

  • 自定义一个FactoryBean,实现Admin的注入,如下:

    /**
     * 自定义FactoryBean,用来创建对象
     * 1、@Component :将创建的MyFactoryBean注入到容器中
     * 2、实现FactoryBean
     * 3、指定泛型<T>
     */
    @Component
    public class MyFactoryBeanimplements FactoryBean<Admin>{
    
        @Override
        public Admin getObject()throws Exception {
            System.out.println("创建Admin");
            return new Admin();
        }
    
        @Override
        public Class<?> getObjectType() {
            return Admin.class;
        }
    
        @Override
        public boolean isSingleton(){
            return true;
        }
    }
    
  • 此时即可从容器中获取到对应的Bean了,如下:

    @Test
    public void testFactoryBean(){
        //根据id获取实例,这里实际获取的是getObject返回的对象
        Admin admin1 = applicationContext.getBean("myFactoryBean", Admin.class);
        System.out.println(admin1);
    }
    
  • 以上是获取的实例Bean,现在我们就想获取MyBeanFactory本身这个对象,可以在id的前面加上 & 即可,如下:

    @Test
    public void testFactoryBean2(){
        //根据&id获取实例,实际获取的就是MyFactoryBean的对象
        MyFactoryBean bean = applicationContext.getBean("&myFactoryBean", MyFactoryBean.class);
        System.out.println(bean);
    }
    

源码解析

  • 指定的是FactoryBean的id,为什么获取的是getObject返回的对象?
    • 简单的逻辑:判断传入的类型是否是 FactoryBean 类型,如果是该类型的,调用getObject方法返回对象即可。
    • 在源码中可以看到调用的是 org.springframework.beans.factory.support.FactoryBeanRegistrySupport#doGetObjectFromFactoryBean 方法
    • FactoryBean解析

以上所述就是小编给大家介绍的《FactoryBean解析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

游戏之旅

游戏之旅

云风 / 电子工业出版社 / 2005-12-01 / 46.00

这是一本非常有特色的计算机编程学习书籍。其特色就在于它将作者十余年来对游戏编程的所思、所感、所悟与编程理论知识相结合,褪去了纯理论的教学理念,使读者在前人的学习过程中吸取学习经验和教训,将计算机基础知识和高级编程技术不知不觉地融入自己的头脑中。 本书忠实地记录了作者十余年来对游戏编程的所思、所感、所悟。全书按照作者本人学习和实践的过程,带着读者从基础的计算机知识到高级的编程技......一起来看看 《游戏之旅》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具