====================
FactoryBean接口_原理
====================
为什么要实现FactoryBean接口,并在覆盖方法getObject()中创建复杂对象?
对于,为什么applicationContext.getBean("conn")返回的是Connection对象而非ConnectionFactoryBean对象?
当执行applicationContext.getBean("conn")时:
- Spring根据配置文件中的找到和“conn”对应的全类名“cn.tedu.injection.ConnectionFactoryBean”
- Spring利用反射将其实例化为对象:Class.forName(全类名)
- Spring通过instanceof()判断该对象是否是FactoryBean的实例,即该对象的类是否是FactoryBean类(接口)的子(实现)类
- 如果不是,说明所要创建的是一个简单对象,直接返回该对象
- 如果是,说明所要创建的是一个复杂对象,将该对象向上造型为FactoryBean并调用其getObject()方法,返回其返回值
反射加回调,什么都能干。