通过工厂创建bean<04>
来源:互联网 发布:ps软件怎么用 编辑:程序博客网 时间:2024/06/05 19:08
1.1 静态工厂
调用静态工厂方法创建bean是将对象创建的过程封装到静态方法中。当客户端需要对象时,只需要简单地调用静态方法,而不用关心创建对象的细节。
声明通过静态方法创建的bean需要在bean的class属性里指定静态工厂类的全类名,同时在factory-method属性里指定工厂方法的名称。最后使用 <constrctor-arg>元素为该方法传递方法参数。
例子:
package com.o1;import java.util.HashMap;import java.util.Map;/** * 静态工厂:不需要创建工厂类自身的实例,只需要调用静态方法即可得到目标对象 * */public class StaticFactory {private static Map<String, Book> map;//静态代码块static{map = new HashMap<String, Book> ();map.put("book01", new Book("01", "name01"));map.put("book02", new Book("02", "name02"));map.put("book03", new Book("03", "name03"));map.put("book04", new Book("04", "name04"));map.put("book05", new Book("05", "name05"));}//通过id 获取对应的book信息public static Book getKey(String key){return map.get(key);}}
<span style="font-family: Arial, Helvetica, sans-serif;">package com.o1;</span>
public class Book {private String id;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Book(String id, String name) {super();this.id = id;this.name = name;}public Book() {System.out.println("ioc执行之前先进行创建对象");}@Overridepublic String toString() {return "Book [id=" + id + ", name=" + name + "]";}}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 通过静态工厂类配置bean --><!-- 注意:bean的class是静态工厂类的全类名,但通过这个bean的配置,最终获取的却是Book的对象 --><!-- factory-method属性:用于指定在静态工厂类中,获取Book对象的静态方法 --><bean id="static" class="com.o1.StaticFactory" factory-method="getKey"><!-- 使用constructor-arg子标签给静态的工厂方法传入参数 --><constructor-arg value="book01"/></bean></beans>
package com.o1;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test01 {@Testpublic void test01() {//创建IOC 容器ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");Book book = (Book) ioc.getBean("book");System.out.println(book);/** * ioc执行之前先进行创建对象 * Book [id=01, name=哈利波特] */}@Testpublic void test02() {//创建IOC 容器ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");Book book = (Book) ioc.getBean("static");System.out.println(book);/** *ioc执行之前先进行创建对象 *Book [id=01, name=name01] */}}
1.2 实例工厂
实例工厂方法:将对象的创建过程封装到另外一个对象实例的方法里。当客户端需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节。
实现方式
①配置工厂类实例的bean
②在factory-method属性里指定该工厂方法的名称
③使用 construtor-arg 元素为工厂方法传递方法参数
package com.o1;import java.util.HashMap;import java.util.Map;/** *实例工厂: 通过非静态的工厂方法获取指定的对象。 * 由于调用的是非静态的方法,所以必须创建当前工厂类的实例对象。 */public class InstanceFactory {private static Map<String, Book> map;{map = new HashMap<String, Book> ();map.put("book01", new Book("01", "name01"));map.put("book02", new Book("02", "name02"));map.put("book03", new Book("03", "name03"));map.put("book04", new Book("04", "name04"));map.put("book05", new Book("05", "name05"));}//通过id 获取对应的book信息public Book getKey(String key){return map.get(key);}}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"><!-- 配置实例工厂的bean --><bean id="instance" class="com.o1.InstanceFactory"/><!-- 配置一个由实例工厂创建的对象,需要对实例工厂类的bean进行引用 --><!-- factory-bean属性:指定创建当前bean的实例工厂的对象 --><bean id="instanceBook03" factory-bean="instance" factory-method="getKey"><constructor-arg value="book03"/></bean></beans>
package com.o1;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test01 {@Testpublic void test03() {//创建IOC 容器ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");Book book = (Book) ioc.getBean("instanceBook03");System.out.println(book);/** *ioc执行之前先进行创建对象 *Book [id=03, name=name03] */}}
1 0
- 通过工厂创建bean<04>
- 通过调用静态工厂方法创建 Bean
- Spring_通过工厂方法创建bean
- 通过Bean工厂创建bean实例的几种方法
- spring学习笔记(17)--通过工厂方法创建Bean
- Spring-工厂创建Bean
- spring创建bean的三种方式-通过构造器,通过静态工厂方法,通过实例工厂方法
- 通过上下文获取bean和通过bean工厂获取bean
- spring in action 学习笔记(三)通过工厂方法创建bean
- 实例化创建bean 和静态工厂创建bean
- spring 通过工厂方法配置Bean
- 9.Spring_通过工厂方法配置Bean
- Spring-10:通过工厂方法配置Bean
- spring中通过工厂方法配置Bean
- Spring_11_通过工厂方法配置 Bean
- Spring通过工厂方法配置Bean
- 二、通过工厂方法来配置bean
- Spring中通过工厂方法配置bean
- linux在菜单栏中添加程序快捷启动图标
- yum安装包时出现is a duplicate with
- java中如何获取Runtime.getRuntime().exec()或ProcessBuilder.start()产生的进程信息
- Spring事务内多线程处理-解决方案
- java网络TCP套接字使用Object I/O stream出现异常
- 通过工厂创建bean<04>
- python3安装jupyterhub
- ios获取文件目录方法
- Masonry使用小记
- 使用ActivityGroup类显示多个Activity
- 求二维数组中最大子数组的和
- Qt之Concurrent Map和Map-Reduce
- HttpClient使用
- 使用editView的项目总结