spring中factory-method使用

spring中factory-method使用

文章目录

  • spring中factory-method使用
      • 一、简介
      • 二、factory-method属性创建对象
        • 2.1 定义类Stu.java
        • 2.2 定义工厂类StuFactory.java
        • 2.3 定义spring配置文件springFactoryMethodConfig.xml
        • 2.4 使用

一、简介

这里介绍下在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


<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">
        
        <constructor-arg value="1"/>
    bean>


    
    <bean id="stuFactory" class="com.dragon.study.study20190618.spring.springFactoryMethod.StuFactory"/>
    
    <bean id="dynamicStu" factory-bean="stuFactory" factory-method="getDynamicStu">
        
        <constructor-arg value="11"/>
    bean>
beans>

2.4 使用

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import static com.sun.jmx.mbeanserver.Util.cast;

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"));
    }
}

你可能感兴趣的:(spring使用)