1. FactoryBean<T>
创建一个类,实现 FactoryBean<T>
public class AnimalFactoryBean implements FactoryBean<AnimalFactoryBean.Animal> {
static class Animal {
/* 省略 */
}
@Override
public Animal getObject() throws Exception {
return new Animal();
}
@Override
public Class<?> getObjectType() {
return Animal.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
@Bean 注入这个 FactoryBean 的实现类
@Bean
public AnimalFactoryBean animalFactoryBean() {
System.err.println("animalFactoryBean...");
return new AnimalFactoryBean();
}
说明:注入的对象除了 factory 以外,还可能有 bean。单例时,两者一起创建;多例时,懒加载;
如果通过 getBean 获取 bean,则获取的是 factory 方法 getObject() 返回的对象,想要获取工厂,则要加前缀“&”;