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