參考: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”)可擷取