==================== 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()方法,返回其返回值 反射加回调,什么都能干。