IOC操作Bean管理(FactoryBean)
1、Spring有两种类型的bean,一种是普通bean,另外一种工厂bean(FactoryBean)
普通Bean:在配置文件中定义类型就是返回类型。
工厂bean:在配置文件中定义bean类型可以和返回类型不一样。
第一步创建类,让这个类作为工厂bean,需要实现接口FactoryBean。
第二步实现接口里面的方法,在实现的方法中定义返回的bean类型。
示例:
代码结构:
MyBean.class:
package factorybean;
import Module.Course;
import org.springframework.beans.factory.FactoryBean;
public class MyBean implements FactoryBean<Course>{
@Override
//定义返回bean
public Course getObject() throws Exception {
Course course=new Course();
course.setName("abc");
return course;
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
}
Course.class:
package Module;
public class Course {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void print()
{
System.out.println(id+" : "+name);
}
}
bean1.xml:
<?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">
<bean id="mybean" class="factorybean.MyBean"></bean>
</beans>
Test:
import factorybean.MyBean;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import Module.Course;
public class MainTest
{
@Test
public void MainTest()
{
ApplicationContext context=new ClassPathXmlApplicationContext("bean1.xml");
Course course=context.getBean("mybean", Course.class);
course.print();
}
}
测试结果:
由此可见在xml文件中定义的返回类型,可以和测试返回类型不一样,返回类型定义在getobject方法中