演示demo
1)FactoryBean的实现类
/**
* description:
* 利用PersonFactoryBean注入一个实例
* author:dingyawu
* date:created in 22:40 2020/12/5
* history:
*/
public class PersonFactoryBean implements FactoryBean<Person> {
//返回一个Person对象,这个对象会被注册到Spring容器中
@Override
public Person getObject() throws Exception {
return new Person();
}
@Override
public Class<?> getObjectType() {
return Person.class;
}
//bean是否为单例;true:是;false:否
@Override
public boolean isSingleton() {
return true;
}
}
2)将实现类包装成配置类
/**
* description:
* author:dingyawu
* date:created in 23:37 2020/12/4
* history:
*/
@Configuration
public class PersonConfig11 {
@Bean
public PersonFactoryBean personFactoryBean(){
return new PersonFactoryBean();
}
}
3)测试类
/**
* 测试PersonFactoryBean这个实例 personFactoryBean实例的类型为:class com.roy.beans.Person,
* 演示如何在Spring容器中获取到FactoryBean对象
*/
@Test
public void testPersonFactoryBean() {
ApplicationContext ac = new AnnotationConfigApplicationContext(PersonConfig11.class);
String[] names = ac.getBeanDefinitionNames();
Arrays.stream(names).forEach(System.out::println);
Object personFactoryBean = ac.getBean("personFactoryBean");
System.out.println("personFactoryBean实例的类型为:" + personFactoryBean.getClass());
Object personFactoryBean3 = ac.getBean("&personFactoryBean");
System.out.println("personFactoryBean3类型:" + personFactoryBean3.getClass());
}
说明的几个点
测试demo中分别演示了如何获取FactoryBean的实现类的bean和FactoryBean的实现类的getObject返回对象的bean
myBatis也是通过这种方式联合Spring的