在Spring 中有两种类型的bean,一种就是普通bean,另外一种就是工厂bean(FactoryBean)。我们平时自己创建的bean就是普通bean,什么是工厂Bean呢?
在使用配置文件注入属性中,配置文件如下:
上图中的就是一个普通bean,即在配置文件中定义的bean类型就是返回类型 ,而一个工厂bean就是在配置文件中定义的bean类型可以和返回类型不相同。而我们创建一个工厂bean就是在创建一个类的时候让这个类实现FactoryBean接口。接下来我们就实现一个这个工厂bean。
在这里我们定义两个类:
package com.university.factoryBean;
public class Course {
String cName;
public void setcName(String cName) {
this.cName = cName;
}
public String getcName() {
return cName;
}
}
package com.university.factoryBean;
import org.springframework.beans.factory.FactoryBean;
public class Book implements FactoryBean<Course> {
String bookName;
public void setBookName(String bookName) {
this.bookName = bookName;
}
/**
* 定义返回的bean类型
* @return
* @throws Exception
*/
@Override
public Course getObject() throws Exception {
Course course = new Course();
course.setcName("测试");
return course;
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--在这里我们只配置了Book类-->
<bean id="book" class="com.university.factoryBean.Book"></bean>
</beans>
测试方法:
public void factoryBeanTest(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean4.xml");
Course course = applicationContext.getBean("book", Course.class);
System.out.print(course.getcName());
}
测试结果
如上就是工厂bean,实例返回类型可以和配置文件中不一样。