工厂bean与普通bean
- spring的普通bean十分简单,使用getBean()方法能够实现创建自身的bean实例,其创建方式如下:
// spring对于普通bean的配置
<bean id="user" class="beanDemo.User">
<property name="age" value="12"></property>
<property name="name" value="李四"></property>
</bean>
// user类
public class User {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
}
// 使用springIOC的方式创建bean实例
ApplicationContext context = new ClassPathXmlApplicationContext("spring-bean.xml");
Object user = context.getBean("user", User.class);
System.out.println(user);
// 输出结果
User{name='李四', age='12'}
- 工厂bean能够实现创建其他的bean实例,就像是一个bean的工厂,可以生产不同的bean,其实现方式如下:
// xml的配置
<bean id="myBean" class="beanDemo.MyBean">
</bean>
// 工厂bean的实现
public class MyBean implements FactoryBean {
// 关键是需要重写getObject方法
@Override
public Object getObject() throws Exception {
User user = new User();
user.setAge("11");
user.setName("张三");
return user;
}
@Override
public Class getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
@Override
public String toString() {
return "MyBean{}";
}
}
// 使用工厂bean
ApplicationContext context = new ClassPathXmlApplicationContext("spring-bean.xml");
Object bean = context.getBean("myBean", User.class);
System.out.println(bean);
// 输出结果
User{name='张三', age='11'}
从上面的例子可以知道,使用工厂bean之后,创建bean的时候会通过工厂bean的getObject()方法来创建实例。