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的更多相关文章

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

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

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

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

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

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

  4. Spring4学习回顾之路07- 通过工厂方法配置Bean

    一:通过静态工厂配置Bean 建立Student.java package com.lql.srping04; /** * @author: lql * @date: 2019.10.28 * Des ...

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

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

  6. 工厂方法配置bean

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

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

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

  8. Spring学习(4)IOC容器配置bean:定义与实例化

    一.  IOC容器配置 1. 一些概念 (1)IOC容器: 定义:具有管理对象和管理对象之间的依赖关系的容器. 作用:应用程序无需自己创建对象,对象由IOC容器创建并组装.BeanFactory是IO ...

  9. spring4-2-bean配置-9-通过工厂方法配置bean

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjwAAAFICAIAAADbNrOHAAAgAElEQVR4nO2dy7W0uhGFOxWn4JEXAS

随机推荐

  1. Shader实例:溶解效果(Dissolve)

    效果: 图左:一道金光闪过,瞬间灰飞烟灭 图右:燃烧效果,先过渡到黄色,然后渐渐过渡到黑色,最后消失殆尽. 这是游戏中常见的效果,各位可以想想自己玩过的游戏. 手头正在玩的,梦三国手游,死亡的时候就是 ...

  2. js前端模块化之加载器原理解析(一)

    先来说一下前端模块化的价值:引用模块此处有详细的介绍,可以自行前往观看. 一.总结如下优点: (1)解决命名冲突(2)烦琐的文件依赖(3)模块的版本管理(4)提高可维护性(5)前端性能优化(6)跨环境 ...

  3. python RecursionError: maximum recursion depth exceeded in comparison错误

    处理快速排序,递归深度可能非常大,而系统默认的深度可能没有这么大 需要设置最大递归深度 import sys sys.setrecursionlimit(100000) # 这个值的大小取决你自己,最 ...

  4. debian下Apache和tomcat整合(使用apt工具)

    最近部署web系统,需要使用tomcat处理和Apache整合使用,tomcat处理JSP,Apache处理静态资源.开始不知道怎么操作,在网上查阅资料走了很多弯路.完成时候,发现其实很简单,现将配置 ...

  5. Winform控件WebBrowser与JS脚本交互

    1)在c#中调用js函数 如果要传值,则可以定义object[]数组. 具体方法如下例子: 首先在js中定义被c#调用的方法: function Messageaa(message) {       ...

  6. Mac环境下Octopress个人博客搭建

    一直想弄一个漂亮一点的个人博客,之前一直用的博客园,对主页的能自定义内容实在不满意,终于下定决定,找到了Octopress这个适合我的解决方案,以下过程都是自己一步一步记录下来的,希望对大家有帮助. ...

  7. iOS 按钮上的标题设置向左向右对齐的方法

    Button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;//左对齐(UIControlContentHo ...

  8. mySql常用函数说明

    #mySql的数学函数select ABS(-5); #绝对值select ceiling(-5.8); #取大整数select floor(-5.8); #取小整数select LEAST(10,3 ...

  9. 1051. Pop Sequence

    原题连接:https://www.patest.cn/contests/pat-a-practise/1051 题目: Given a stack which can keep M numbers a ...

  10. android 之httpclient方式提交数据

    HttpClient: 今天实战下httpclient请求网络json数据,解析json数据返回信息,显示在textview, 起因:学校查询饭卡余额,每次都要访问校园网(内网),才可以查询,然后才是 ...