一、簡介
這里介紹下在spring中,通過factory-methon屬性創建bean。
回顧下,在Spring中,創建bean對象的方式有:
直接在xml配置文件中,通過bean標簽創建對象;
通過注解如@Bean、@Service等創建對象;
通過FactoryBean工廠類創建對象(詳情請查看以前寫的另一篇博客);
通過factory-methon屬性創建對象(本文將介紹的)
二、factory-method屬性創建對象
通過factory-method屬性有兩種方式,一種是靜態的(方法必須是靜態的),另一種是動態的。使用上不復雜,這里直接上代碼,解釋請看注釋。
2.1 定義類Stu.java
public class Stu {
public String stuId;
public Stu(String stuId) {
this.stuId = stuId;
}
}
2.2 定義工廠類StuFactory.java
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;
public class StuFactory {
static Map<String,Stu> stuMap = new HashMap<>();
static{
//初始化
Stream.iterate(1,n->n+1).limit(5).map(String::valueOf).forEach(t-> stuMap.put(t, new Stu(t)));
}
//靜態創建類,方法必須是靜態(static修飾)
public static Stu getStaticStu(String stuId){
return stuMap.get(stuId);
}
//動態創建類
public Stu getDynamicStu(String stuId){
return new Stu(stuId);
}
2.3 定義spring配置文件springFactoryMethodConfig.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="staticStu" class="com.dragon.study.study20190618.spring.springFactoryMethod.StuFactory"
factory-method="getStaticStu">
<!--傳入getStaticStu方法的參數-->
<constructor-arg value="1"/>
</bean>
class="com.dragon.study.study20190618.spring.springFactoryMethod.StuFactory"/>
<!--動態獲取對象-->
<bean id="dynamicStu" factory-bean="stuFactory" factory-method="getDynamicStu"> <!--傳入getDynamicStu方法的參數-->
<constructor-arg value="11"/></bean>
2.4 使用
public class SpringFactoryMethod {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:springFactoryMethodConfig.xml");
//獲取靜態Bean
Stu staticStu = cast(ac.getBean("staticStu"));
//獲取動態Bean
Stu dynamicStu =cast(ac.getBean("dynamicStu"));
————————————————
版權聲明:本文為CSDN博主「panda-star」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/chinabestchina/article/details/103077079