一:通过静态工厂配置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的更多相关文章

  1. 4.spriing:Bean的生命周期/工厂方法配置Bean/FactoryBean

    1.Bean的生命周期 scope:singleton/prototype 1)spring容器管理singleton作用的生命周期,spring能够精确知道Bean合适创建,何时初始化完成,以及何时 ...

  2. Spring初学之通过工厂方法配置Bean

    工厂方法配置bean分为两种,一种是实例工厂方法,另一种是静态工厂方法. 先来看看实体bean: Car.java: package spring.beans.factory; public clas ...

  3. 11.Spring通过工厂方法配置Bean

    通过工厂方法配置Bean暴扣静态工厂方法和实例工厂方法. 1.静态工厂方法 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户端需要对象时,只需要简单的调用静态方法,而不去关心创建 ...

  4. 工厂方法配置bean

    1:静态工厂方法配置bean 1):对象 package com.spring.helloworld; public class Car { private String name; private ...

  5. Spring4学习回顾之路06- IOC容器中Bean的生命周期方法

    SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行特定的任务! Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或者工厂方法创建 ...

  6. Spring4.0学习笔记(6) —— 通过工厂方法配置Bean

    1.静态工厂方法: bean package com.spring.factory; public class Car { public Car(String brand) { this.brand ...

  7. Spring学习记录(九)---通过工厂方法配置bean

    1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...

  8. spring 通过工厂方法配置Bean

    概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静 ...

  9. 通过工厂方法配置Bean

    前面几节,我们配过了好多Bean,通过反射机制,在class属性里填写全类名,现在我们来讲讲其他方式,通过工厂方法,还有通过FactoryBean,这个在我们整合第三方框架时会用到. 工厂方法可以分为 ...

随机推荐

  1. codeforces700B

    CF700B Connecting Universities 题意翻译 树之王国是一个由n-1条双向路连接着n个城镇的国家,任意两个城镇间都是联通的. 在树之王国共有2k所大学坐落于不同的城镇之中. ...

  2. codeforces865C

    Gotta Go Fast CodeForces - 865C You're trying to set the record on your favorite video game. The gam ...

  3. Win10 + CLion + 树莓派 + QT 远程开发调用Python

    原则:能在一个机器上开发的就不在两台机器上!! 首先需要配置远程QT开发环境 配置Cmake cmake_minimum_required(VERSION 3.14) project(qt_test) ...

  4. 阿里云修改主机名hostname

    一.永久修改主机名的方法(针对于普通的服务器) 1.通过hostname命令修改. [root@izwz9f7pm0tw36neb1j7gmz ~]# hostname node1 修改完之后发现主机 ...

  5. Java核心复习 —— ArrayList源码阅读

    一.ArrayList 介绍 ArrayList是List接口可变数组的实现. 特点 非线程安全 查找和修改效率高 二.ArrayList 使用方法 remove元素 @Test public voi ...

  6. 解决spring-boot 各版本包冲突兼容的方法

    思路        在微服务盛行的当下,spring boot 流行程度已经家喻户晓.但同时,随着spring boot 快速迭代,出现了很多版本,比如当前已经推出了2.2.x-SNAPSHOT/ , ...

  7. laravel中orderBy使用

    laravel中orderBy使用 一.总结 一句话总结: 链式操作:laravel中的数据库操作可以是链式操作,所以类似这种想要多个orderBy效果的就直接接在后面写就可以了 User::orde ...

  8. spark-submit 提交任务及参数说明

    spark-submit 可以提交任务到 spark 集群执行,也可以提交到 hadoop 的 yarn 集群执行. 1. 例子 一个最简单的例子,部署 spark standalone 模式后,提交 ...

  9. 1.3 Go语言基础之数据类型

    Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等.Go 语言的基本类型和其他语言大同小异. 一.整型 1.1 基本类 ...

  10. LC 820. Short Encoding of Words

    Given a list of words, we may encode it by writing a reference string S and a list of indexes A. For ...