随笔 - 303  文章 - 0  评论 - 3  阅读 - 15万

Spring高级特性之四:FactoryBean和BeanFactory

  FactoryBean和BeanFactory两只是两个单词顺序不同但是内容大不相同。落脚点在后面一个单词,前面一个单词是其功能描述:FactoryBean——工厂bean,一个建工厂的bean?BeanFactory——bean工厂,一个生产bean的工厂。初识比较拗口像最开始接触函数指针与指针函数一样。

  Sring对外提供接口XXXApplicationContext的继承UML图,可以看到BeanFactory是容器的顶级接口,具体使用是其某个子类。本文不详述BeanFactory,在前面文章中有介绍其子类使用Spring Bean加载全过程(注解配置) - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)

        

                  

  下面重点介绍FactoryBean:SpringBean有两种,⼀种是普通Bean,⼀种是⼯⼚BeanFactoryBean), FactoryBean可以⽣成某⼀个类型的Bean实例),也就是说我们可以借助于它⾃定义Bean的创建过程。FactoryBean使⽤较多,尤其在Spring框架⼀些组件中会使⽤,还有其他框架和Spring框架整合时使⽤。

                  

   那么getBean时Spring如何判断要获取的这个bean对象使用用户自定义的FactoryBean构造呢?

  通过跟踪源码可以找到处理逻辑:判断beandefinition是否FactoryBean,如果是则从工厂bean中获取对象。

   其中从工厂bean获取对象时,判断是否有引用,可以获得构造对象的工厂bean对象:

                

   测试案例如下:

    bean:

               

     factorybean:

              

     配置类:

              

     测试类:

              

     对于&的有误,差别还是比较大的,如上源码分析——有&表示获取工厂bean,无表示通过工厂bean获取被构造的对象bean:

              

     实际应用中,FactoryBean就可以定制化bean(如果使用配置方式比较复杂,定制化更实用时)。

 

posted on   池塘里洗澡的鸭子  阅读(107)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示