在Spring中有两种类型的Bean,一种是普通Bean,即BeanFactory;另一种是工厂Bean,即FactoryBean。
1 工厂Bean
工厂Bean的好处就是,我们可以自定义对象的创建过程,如果一个对象的创建过程非常复杂,需要涉及到很多业务逻辑的处理或多个参数的初始化等,用XML配置文件的方式实现起来比较麻烦,这个时候可以考虑使用FactoryBean接口,来完成Bean的创建。
1.1 FactoryBean接口
package org.springframework.beans.factory;
public interface FactoryBean<T> {
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();
}
getObject()方法:使用工厂Bean创建的对象,其实就是这个方法的返回值。
getObjectType()方法:创建对象的类型。
isSingleton()方法:创建的Bean是否单例。
1.2 简单案例
因为FactoryBean接口是一个接口,需要创建一个类,实现这个接口。
StudentFactoryBean.java
public class StudentFactoryBean implements FactoryBean<Student> {
@Override
public Student getObject() throws Exception {
Student student = new Student();
Address address = new Address();
address.setProvince("河北");
address.setCity("唐山");
student.setAddress(address);
return student;
}
@Override
public Class<?> getObjectType() {
return Student.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
ApplicationContenx.xml
<!--将工厂Bean交给Spring管理-->
<bean id="studentBean" class="com.wyl.spring.StudentFactoryBean"> </bean>
SpringBeanTest.java 测试类
public class SpringBeanTest {
public static void main(String[] args) {
// 1.创建IOC容器,并指定配置文件位置
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.从IOC容器中获取管理的对象
Student bean = ac.getBean("studentBean",Student.class);
// 3.输出验证
System.out.println(bean);
}
}
控制台输出
Student{sid=null, height=0.0, sname='null', address=Address{province='河北', city='唐山'}, pens=null, books=null, score=null}