Spring学习记录(九)---通过工厂方法配置bean
1. 使用静态工厂方法创建Bean,用到一个工厂类
例子:一个Car类,有brand和price属性。
package com.guigu.spring.factory;
public class Car {
private String brand;
private double price;
public Car(){
}
public Car(String brand,double price){
this.brand=brand;
this.price=price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Car [brand=" + brand + "]";
}
}
工厂类:
package com.guigu.spring.factory; import java.util.HashMap;
import java.util.Map; public class StaticCarFactory { private static Map<String,Car> cars=new HashMap<String,Car>();
//静态代码块,防止重复添加
static{
cars.put("aodi", new Car("aodi",300000));
cars.put("ford", new Car("ford",200000));
}
//静态工厂方法
public static Car getCar(String name){
return cars.get(name);
}
}
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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!--
class属性:指向静态工厂方法的全类名,不是bean实例的实现类
factory-method:指向静态工厂方法的名字,方法里面返回bean
constructor-arg:如果工厂方法需要传入参数,则用constructor-arg配置 -->
<bean id="car1" class="com.guigu.spring.factory" factory-method="getCar">
<constructor-arg value="aodi"></constructor-arg>
</bean> </beans>
main函数测试
public class main {
public static void main(String[] args) {
ApplicationContext ctx =new ClassPathXmlApplicationContext("bean-factory.xml");
Car car1=(Car) ctx.getBean("car1");
System.out.println(car1);
}
}
输出:

这个过程中,spring不再自己创建bean实例,bean实例由用户自己提供的工厂方法创建。静态工厂方法,方法必须是静态的
---------------------------------------
其实我还是不懂, 调用静态方法

什么时候对cars进行初始化了?单单调用静态方法并没有执行工厂类。望看观指教
--------------------------------------
2. 实例工厂方法,工厂本身是实例,要实现创建工厂对象本身
/*
* 实例工厂方法:实例工厂的方法,即先需要创建工厂本身,再调用工厂的实例方法来返回bean的实例
* */
public class InstanceCarFactory { private Map<String,Car> cars=null; public InstanceCarFactory(){
cars = new HashMap<String, Car>();
cars.put("aodi", new Car("aodi",300000));
cars.put("ford", new Car("ford",400000));
}
//
public Car getCar(String brand){
return cars.get(brand);
}
}
xml配置
<!--先配置工厂的实例-->
<bean id="carFactory" class="com.guigu.spring.factory"></bean>
<!--
factory-bean属性:指向实例工厂方法的bean
method:指向静态工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,用constructor-arg配置
-->
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
<constructor-arg value="ford"></constructor-arg>
</bean>
main函数
public class main {
public static void main(String[] args) {
ApplicationContext ctx =new ClassPathXmlApplicationContext("bean-factory.xml");
Car car2 = (Car) ctx.getBean("car2");
System.out.println(car2);
}
}
输出:
这个好理解,先实例工厂,调用构造函数,然后bean调用工厂的方法。
文章为学习记录,若有错误,望指正
Spring学习记录(九)---通过工厂方法配置bean的更多相关文章
- Spring4.0学习笔记(6) —— 通过工厂方法配置Bean
1.静态工厂方法: bean package com.spring.factory; public class Car { public Car(String brand) { this.brand ...
- Spring初学之通过工厂方法配置Bean
工厂方法配置bean分为两种,一种是实例工厂方法,另一种是静态工厂方法. 先来看看实体bean: Car.java: package spring.beans.factory; public clas ...
- 11.Spring通过工厂方法配置Bean
通过工厂方法配置Bean暴扣静态工厂方法和实例工厂方法. 1.静态工厂方法 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户端需要对象时,只需要简单的调用静态方法,而不去关心创建 ...
- Spring4学习回顾之路07- 通过工厂方法配置Bean
一:通过静态工厂配置Bean 建立Student.java package com.lql.srping04; /** * @author: lql * @date: 2019.10.28 * Des ...
- 4.spriing:Bean的生命周期/工厂方法配置Bean/FactoryBean
1.Bean的生命周期 scope:singleton/prototype 1)spring容器管理singleton作用的生命周期,spring能够精确知道Bean合适创建,何时初始化完成,以及何时 ...
- 工厂方法配置bean
1:静态工厂方法配置bean 1):对象 package com.spring.helloworld; public class Car { private String name; private ...
- spring 通过工厂方法配置Bean
概要: 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当client须要对象时,仅仅须要简单地调用静态方法,而不用关心创建对象地细节. 要声明通过静 ...
- Spring学习(4)IOC容器配置bean:定义与实例化
一. IOC容器配置 1. 一些概念 (1)IOC容器: 定义:具有管理对象和管理对象之间的依赖关系的容器. 作用:应用程序无需自己创建对象,对象由IOC容器创建并组装.BeanFactory是IO ...
- spring4-2-bean配置-9-通过工厂方法配置bean
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjwAAAFICAIAAADbNrOHAAAgAElEQVR4nO2dy7W0uhGFOxWn4JEXAS
随机推荐
- Greenplum安装
最近需要安装Greenplum测试一些东西,在安装过程中出现了许多问题,所以在这里将安装过程整理一下,主要参考<Greenplum企业应用实践>和http://jxzhfei.blog.5 ...
- #pg学习#postgresql的安装
1.按照官网给的步骤编译安装(Mac安装是比较容易的,相比Liunx) cd /Users/renlipeng/Desktop/postgresql-9.5.1 ./configure --prefi ...
- 好文分享_java堆栈的区别
Java Heap Memory Heap memory is used by java runtime to allocate memory to Objects and JRE classes. ...
- 分布式服务协调技术zookeeper笔记
本文主要学习ZooKeeper的体系结构.节点类型.节点监听.常用命令等基础知识,最后还学习了ZooKeeper的高可用集群的搭建与测试.希望能给想快速掌握ZooKeeper的同学有所帮助. ZooK ...
- [资源分享]yslow 与firebug 修复版本Firefox35【绿色版本下载】
自从火狐也开始做版本帝后,相关查的插件越来越不好使了, 而且火狐集成自己的调试工具,也不是很好使用,Yslow 也坏掉了 找公司写c++修复了下 把yslow和Firebug 打包到一起,而且关闭自动 ...
- 还原后缀名为.bak的数据库备份文件
1.打开SQL Server Management Studio,随便右击击一个数据库选择任务-->还原-->数据库 4.在弹出来的窗口中的源选项中选择设备-->点选择设备--> ...
- js学习笔记
javacript笔记根据EC5.0一共有六种数据类型:number,string,bool undefine,nullobject(广义的) --->object(狭义的),array,fun ...
- c# Repeater中CommandArgument传多个参数
<ItemTemplate> <div onmouseover="javascript:this.style.cursor='hand ...
- AFNetWorking设置HTTPRequestHeaders的坑
今天在项目中要封装一个请求头但是用如下方法总是失败: 求其原因不知道: 于是乎改用了属性对象后居然成功了..: // // RequestManager.m // 获取天气demo // // ...
- 深入浅出HTTP协议(WEB开发和面试必备)
1. 基础概念篇 a.简介 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和 ...