Spring4学习回顾之路07- 通过工厂方法配置Bean
一:通过静态工厂配置Bean
建立Student.java
package com.lql.srping04; /**
* @author: lql
* @date: 2019.10.28
* Description:
*/
public class Student { private String name;
private Integer age; @Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
} public Student() {
} public Student(String name, Integer age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
建立静态工厂StaticStudentFactory.java
package com.lql.srping04;
import java.util.HashMap; import java.util.Map; /**
* @author: lql
* @date: 2019.10.28
* Description:
*/
public class StaticStudentFactory { private static Map<String,Student> map = new HashMap<String, Student> (); static {
map.put("张三",new Student("张三",18));
map.put("李四",new Student("李四",17));
} public static Student getStudent(String name) {
return map.get(name);
}
}
通过静态工厂方法配置Bean
<?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="studentfactory" class="com.lql.srping04.StaticStudentFactory" factory-method="getStudent">
<constructor-arg value="李四"></constructor-arg>
</bean>
</beans>
注意的是:因为静态方法getStudent(String name);有个参数,则在配置的时候需要<constructor-arg>来指定value;上图标签属性的说明:class:指向静态工厂方法的全类名,factory-method:指向静态工厂方法的名字
建立测试类:
package com.lql.srping04; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @author: lql
* @date: 2019.10.28
* Description:
*/
public class StudetnTest {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("spring04.xml");
Student student = app.getBean("studentfactory", Student.class);
System.out.println(student);
}
}
测试结果:
"C:\Program Files\Java\jdk1.8.0_201\bin\java" "-javaagent:D:\Program\JetBrains\IntelliJ IDEA 2017.3.3\lib\idea_rt.jar=58238:D:\Program\JetBrains\IntelliJ IDEA 2017.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_201\jre\lib\rt.jar;F:\bdyc\SpringFramework\out\production\SpringFramework;F:\bdyc\SpringFramework\libs\c3p0-0.9.1.2.jar;F:\bdyc\SpringFramework\libs\commons-logging-1.1.1.jar;F:\bdyc\SpringFramework\libs\mysql-connector-java-5.1.7-bin.jar;F:\bdyc\SpringFramework\libs\spring-aop-4.0.0.RELEASE.jar;F:\bdyc\SpringFramework\libs\spring-beans-4.0.0.RELEASE.jar;F:\bdyc\SpringFramework\libs\spring-context-4.0.0.RELEASE.jar;F:\bdyc\SpringFramework\libs\spring-core-4.0.0.RELEASE.jar;F:\bdyc\SpringFramework\libs\spring-expression-4.0.0.RELEASE.jar" com.lql.srping04.StudetnTest
十月 28, 2019 1:49:35 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@37bba400: startup date [Mon Oct 28 13:49:35 GMT+08:00 2019]; root of context hierarchy
十月 28, 2019 1:49:35 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring04.xml]
Student{name='李四', age=17}
二:通过实例工厂方法配置Bean
建立实例工厂InstanceFactory.java
package com.lql.srping04; import java.util.HashMap;
import java.util.Map; /**
* @author: lql
* @date: 2019.10.28
* Description:实例工厂
*/
public class InstanceFactory { private Map<String,Student> map = null; public InstanceFactory(){
map = new HashMap<>();
map.put("张三",new Student("张三",18));
map.put("李四",new Student("李四",17));
} public Student getStudent(String name) { return map.get(name);
}
}
配置:factory-bean:指定工厂实例bean.
<?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="instancefactory" class="com.lql.srping04.InstanceFactory"></bean> <!--通过实例工厂方法类来配置bean-->
<bean id="student" factory-bean="instancefactory" factory-method="getStudent">
<constructor-arg value="张三"></constructor-arg>
</bean>
</beans>
测试:
package com.lql.srping04; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @author: lql
* @date: 2019.10.28
* Description:
*/
public class StudetnTest {
public static void main(String[] args) {
ApplicationContext app = new ClassPathXmlApplicationContext("spring04.xml");
// Student student = app.getBean("studentfactory", Student.class);
Student student = app.getBean("student", Student.class);
System.out.println(student);
}
}
结果:
十月 28, 2019 2:04:25 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@37bba400: startup date [Mon Oct 28 14:04:25 GMT+08:00 2019]; root of context hierarchy
十月 28, 2019 2:04:25 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring04.xml]
Student{name='张三', age=18}
Spring4学习回顾之路07- 通过工厂方法配置Bean的更多相关文章
- 4.spriing:Bean的生命周期/工厂方法配置Bean/FactoryBean
1.Bean的生命周期 scope:singleton/prototype 1)spring容器管理singleton作用的生命周期,spring能够精确知道Bean合适创建,何时初始化完成,以及何时 ...
- Spring初学之通过工厂方法配置Bean
工厂方法配置bean分为两种,一种是实例工厂方法,另一种是静态工厂方法. 先来看看实体bean: Car.java: package spring.beans.factory; public clas ...
- 11.Spring通过工厂方法配置Bean
通过工厂方法配置Bean暴扣静态工厂方法和实例工厂方法. 1.静态工厂方法 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户端需要对象时,只需要简单的调用静态方法,而不去关心创建 ...
- 工厂方法配置bean
1:静态工厂方法配置bean 1):对象 package com.spring.helloworld; public class Car { private String name; private ...
- Spring4学习回顾之路06- IOC容器中Bean的生命周期方法
SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行特定的任务! Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或者工厂方法创建 ...
- Spring4.0学习笔记(6) —— 通过工厂方法配置Bean
1.静态工厂方法: bean package com.spring.factory; public class Car { public Car(String brand) { this.brand ...
- Spring学习记录(九)---通过工厂方法配置bean
1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...
- spring 通过工厂方法配置Bean
概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静 ...
- 通过工厂方法配置Bean
前面几节,我们配过了好多Bean,通过反射机制,在class属性里填写全类名,现在我们来讲讲其他方式,通过工厂方法,还有通过FactoryBean,这个在我们整合第三方框架时会用到. 工厂方法可以分为 ...
随机推荐
- Ioc容器与laravel服务容器初探
一.Ioc容器 某天,小J心血来潮,决定建造一艘星舰,这艘星舰要搭载"与众不同最时尚,开火肯定棒"的电磁炮.于是他写了一个星舰类: class ElectromagneticGun ...
- HDU6513/CCPC2017--A Secret(KMP)
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others)Total ...
- Selenium Firefox 官方Webdriver -- Geckodriver
下载地址: https://github.com/mozilla/geckodriver/releases 配置环境: 直接将解压的geckodriver.exe放到python的Scripts中 比 ...
- 定义了char**p,为什么能用p[i][j]的形式?p又不是二维数组?
char **p;p[i][j]相当于*(*(p+i)+j) https://www.zhihu.com/question/63717863
- RHSA-2018:0014-重要: linux-firmware 安全更新
修复命令: yum update iwl2030-firmware yum update iwl5000-firmware yum update iwl100-firmware yum update ...
- Leetcode题目215.数组中的第K个最大元素(中等)
题目描述: 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 ...
- Leetcode题目56.合并区间(中等)
题目描述: 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 ...
- SpringCloud-Config通过Java访问URL对敏感词加密解密
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- Sublime text3中文版 无法安装插件There are no packages available for installation问题的解决。
说起来差点没被气死,我当时的情况已经是要疯了,连他们的域名都ping不通,我还想着,咋地,要倒闭了? 首选项->插件设置->Package Control->默认 里边的这个配置项 ...
- Python3+RobotFramewok 循环判断以及Evaluate用法(三)
本章主要介绍RF的循环,判断以及关键字Evaluate. 1. for循环 在RF中通过 :FOR 编写循环 :FOR ${i} in range 10 log ${i} @{list} create ...