一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean。在某些情况下,实例化bean过程比较复杂,如果按照传统的方式,则需要在标签中提供大量的配置信息,配置方式的灵活性是受限的。为此,Spring可以通过实现FactoryBean的接口来定制实例化bean的逻辑。
1.创建MyFactoryBean 实现FactoryBean接口,重写getObject方法。
public class MyFactoryBean implements FactoryBean<User> {@Overridepublic User getObject() throws Exception {System.out.println("MyFactoryBean----getObject---begin");//任何创建对象的操作return new User("zhangsan");}@Overridepublic Class<?> getObjectType() {return User.class;}@Overridepublic boolean isSingleton() {return false;}
}
配置文件加bean标签
<bean id="myFactoryBean" class="com.MyFactoryBean"/>
main函数方法调用
MyClassPathXmlApplicationContext ac = new MyClassPathXmlApplicationContext("person.xml");
Person bean = ac.getBean(Person.class);
ac.getBean(User.class);
FactoryBean调用getObject方法:
然后跳转到实现FactoryBean接口重写的方法中
看下一级缓存的对象: