最后
由于篇幅原因,就不多做展示了
-
前者是spring的根接口,定义了Bean工厂最基础的功能特性,是一个Factory
-
后者是用来生成普通的bean,实现了这个接口之后,spring会在容器初始化时会把实现了这个接口的bean取出来,然后通过getObject()方法来生成bean。(根据该Bean的Id从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身, 如果要获取FactoryBean对象,可以在id前面加一个&符号来获取)
// 根据FactoryBean创建的对象
User user4a = (User) applicationContext.getBean(“userFactoryBean”);
User user4b = (User) applicationContext.getBean(“userFactoryBean”);
System.out.println(“FactoryBean创建的对象:” + user4a);
System.out.println(“FactoryBean创建的对象:” + user4b);
上面代码获取到的是User对象
加上转义字符FACTORY_BEAN_PREFIX = "&"
UserFactoryBean user4a = (UserFactoryBean) applicationContext.getBean(“&userFactoryBean”);
UserFactoryBean user4b = (UserFactoryBean) applicationContext.getBean(“&userFactoryBean”);
System.out.println(“FactoryBean创建的对象:” + user4a);
System.out.println(“FactoryBean创建的对象:” + user4b);
打印的就是UserFactoryBean
对象
===========================================================================
上面提到的转义字符&:
@Autowired按类型获取实例,@Qualifier支持按名字获取实例,最终都是调用的这些方法。
可以看到BeanFactory只对IOC容器的基本行为做了定义,并不关心是怎么生成bean的。
=============================================================================
根据单一职责原则,较顶层的接口一般都实现了单一职责。
ListableBeanFactory
该接口可以以列表的方式提供bean的相关信息,特点是可以批量列出工厂生产的实例的信息。
AutowireCapableBeanFactory
该类可以填充那些不受Spring控制的类,实现了这个接口的,诸如AbstractAutowireCapableBeanFactory
便可以使用其autowireBean
方法中的populateBean
方法来装配特定的Spring Bean实例来满足业务需求。
一般在代码中不建议直接使用这个接口
最后
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**