参考:https://blog.csdn.net/baidu_19473529/article/details/80558996
基本概念
FactoryBean是一个Java bean,但是和普通的javabean不太一样,他是能生产出当前对象的工厂bean。
基本使用
FactoryBean是一个接口,创建类实现此接口,如下:
package test;
import org.springframework.beans.factory.FactoryBean;
/**
*
* @author
*/
public class MyTestBean implements FactoryBean<MyTestBean> {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//返回由FactoryBean创建的bean实例,如果isSingleton()返回true,则该实例会放到Spring容器中单实例缓存池中。
@Override
public MyTestBean getObject() throws Exception {
MyTestBean bean = new MyTestBean();
bean.setName("Tom");
return bean;
}
//返回FactoryBean创建的bean类型。
@Override
public Class<?> getObjectType() {
return MyTestBean.class;
}
//返回由FactoryBean创建的bean实例的作用域是singleton还是prototype。
@Override
public boolean isSingleton() {
return true;
}
}
然后将此bean像普通bean一样配置在spring配置文件中:
<?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 ="myTestBean" class= "test.MyTestBean" > </bean>
</beans>
获取applicationContext容器之后,通过getBean(“myTestBean”)获取的是类MyTestBean的getObject()返回的值是带有name是Tom的bean,要想获取MyTestBean类对象,则在通过在bean的id前加&的符号方式获取,即getBean(“&myTestBean”)可获取