Spring
有两种类型 bean
,一种是我们自己定义的普通 bean
,另外一种工厂 bean。
普通的bean
在配置文件中定义 bean
类型就是返回类型。FactoryBean
在配置文件定义 bean
类型可以和返回类型不一样。
第一步:创建类,让这个类作为工厂bean
,实现接口FactoryBean
第二步:实现接口里面的方法,在实现的方法中定义返回的 bean
类型
public class MyFactoryBean implements FactoryBean<User>{
//定义返回的bean
@Override
public User getObject() throws Exception {
User user = new User();
user.setName("张三");
return user; //定义的是MyFactoryBean类型,却返回User类型
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
}
XML文件myFactoryBean.xml
<bean id="myFactoryBean" class="FactoryBean.MyFactoryBean">
</bean>
测试
@Test
public void test3(){
//1.加载Spring配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("factoryBean.xml");
//2.获取配置创建的对象
User user = context.getBean("myFactoryBean", User.class);
System.out.println(user.getName());
System.out.println(user.getClass().getName());
}
输出结果:
这样就实现了定义的是MyFactoryBean
,当获取对象是却是User
类的实例对象。