• 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

  • 相关阅读:
    《Effective C#》读书笔记——了解.NET内存管理机制<.NET资源管理>
    《Effective C#》读书笔记——条目13:正确地初始化静态成员变量<.NET资源管理>
    用创新和务实的精神开创反洗钱检查工作的新局面
    《谈谈具有中国特色的“全能型”程序员》(2009/12/11)
    EOM与程序员话题的开场白(2009/12/07)
    从事反洗钱工作要有一定的高度
    程序员漫谈(2009/12/08)
    怎样快速确定程序员编程的水平(2009/12/10)
    重视或应付!当前金融机构反洗钱面临的一个问题
    反洗钱法律法规
  • 原文地址:https://www.cnblogs.com/kikochz/p/12846565.html
Copyright © 2020-2023  润新知