一:通过静态工厂配置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}

最新文章

  1. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
  2. Linux Shell 网络层监控脚本(监控包括:连接数、句柄数及根据监控反馈结果分析)
  3. EM算法
  4. lucene5.5 field
  5. 新建web工程Jdk怎么不是自己安装的, 是自带的
  6. mysql-函数FOUND_ROWS()
  7. 论文笔记之:Deep Reinforcement Learning with Double Q-learning
  8. QF——iOS沙盒机制
  9. mark_May
  10. Maven学习专题--Maven入门及安装
  11. nodeCZBK-笔记1
  12. IdentityServer(13)- 添加JavaScript客户端
  13. 为何学习matplotlib-【老鱼学matplotlib】
  14. MT【189】二次条件配方
  15. (链表 递归) leetcode 24. Swap Nodes in Pairs
  16. typescript handbook 学习笔记1
  17. IIS 是如何处理 ASP.NET 请求的
  18. 加载JS代码
  19. CentOS 7下的KVM网卡配置为千兆网卡
  20. 【Codeforces】CF 911 D. Inversion Counting(逆序对+思维)

热门文章

  1. Zookeeper原理 一
  2. Postman中的全局/环境/集合变量的使用及优先级
  3. INNER JOIN连接两个表、三个表、五个表的SQL语句
  4. webpack4 打包 library 遇到的坑
  5. git与github建立仓库连接步骤(纯小白教程)
  6. ci 框架中defined(&#39;BASEPATH&#39;) OR exit(&#39;No direct script access allowed&#39;);
  7. HearthBuddy炉石兄弟 格雷迈恩
  8. uni-app 的更新及碰到的问题
  9. 只要你用atom修改后保存代码文件的时候,你在chrome上的页面就会自动刷新。
  10. known