spring中factory-method


一、簡介
這里介紹下在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM