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

工厂方法可以分为静态工厂方法和实例工厂方法。

静态工厂方法

调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户端需要对象时,只需要简单的调用静态方法,而不用关心创建对象的细节。

要声明通过静态方法创建的Bean,需要在Bean的class属性里指定拥有该工厂方法的类,同时在factroy-method属性里指定工厂方法的名称,最后使用<constrctor-arg>元素为该方法传递方法参数。

做一下准备工作,创建Car.java为了方便,我们需要额外给它加一个含参的构造方法:

创建StaticCarFactory.java,所谓静态工厂方法就是直接调用某个类的静态方法就可以返回Bean实例。

  1. package com.figsprite.bean.factory;  
  2.     
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.     
  6. public class StaticCarFactory {  
  7.     
  8.     
  9.     private static Map<String,Car> cars = new HashMap<>();  
  10.     
  11.     
  12.     static {  
  13.         cars.put("奥迪",new Car("奥迪",233));  
  14.         cars.put("宝马",new Car("宝马",666));  
  15.     }  
  16.     
  17.     //静态工厂方法  
  18.     public static Car getCar(String name){  
  19.         return cars.get(name);  
  20.     }  
  21. }  

    创建新的配置文件,此时,class属性只想静态工厂方法的全类名,factory-method指向静态工厂方法名,最后,如果工厂方法需要参数,通过<constructror-arg>配置参数

<bean id="car1" class="com.figsprite.bean.factory.StaticCarFactory"
factory-method="getCar"
>
<constructor-arg value="奥迪"/>
</bean>

接下来写一个测试方法

实例工厂方法

实例工厂指的是创建Bean之前还要实例化工厂。在调用工厂的实例方法返回bean的实例

创建一个实例工厂类:InstanceCarFactory.java

  1. package com.figsprite.bean.factory;  
  2.   
     
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
     
  6. public class InstanceCarFactory {  
  7.     private Map<String,Car> cars = null;  
  8.   
     
  9.     public InstanceCarFactory(){  
  10.         cars = new HashMap<>();  
  11.         cars.put("奥迪",new Car("奥迪",233));  
  12.         cars.put("宝马",new Car("宝马",666));  
  13.     }  
  14.   
     
  15.   
     
  16.     public Car getCar(String brand){  
  17.         return cars.get(brand);  
  18.     }  
  19. }  

来到配置文件,我们需要先造一个工厂bean,再通过这个bean创建car的bean

  1. <bean id="carFactory" class="com.figsprite.bean.factory.InstanceCarFactory"/>  
  2.   
     
  3. <bean id="car2" factory-bean="carFactory" factory-method="getCar">  
  4.     <constructor-arg value="宝马"></constructor-arg>  
  5. </bean>  

通过工厂方法配置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. Spring4学习回顾之路07- 通过工厂方法配置Bean

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

  5. 工厂方法配置bean

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

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

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

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

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

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

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

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

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjwAAAFICAIAAADbNrOHAAAgAElEQVR4nO2dy7W0uhGFOxWn4JEXAS

随机推荐

  1. Java开发笔记(五十六)利用枚举类型实现高级常量

    前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...

  2. Acer宏碁笔记本触摸板失效解决方法

    打开windows设置,找到鼠标设置 之后,选择触摸板设置,将其开启 PS: 由于我是安装完驱动之后,才发现有这个触摸板设置的 如果找不到这个触摸板设置的哈,应该就是驱动安装完之后就有了 驱动的话去官 ...

  3. 如何在vue单页应用中使用百度地图

    作为一名开发人员,每次接到开发任务,我们首先应该先分析需求,然后再思考技术方案和解决方案.三思而后行,这是一个好的习惯. 需求:本项目是采用vue组件化开发的单页应用项目,现需要在项目中引入百度的地图 ...

  4. 使用ethtool显示硬件PHY信息

    1.总结: 使用ethtool 可以查看端口的phy配置 2.显示端口配置 [root@localhost zhou]# ethtool ens33Settings for ens33: Suppor ...

  5. SQL Server非域(跨域)环境下镜像(Mirror)的搭建步骤及注意事项

    在实际的生产环境下,我们经常需要跨域进行数据备份,而创建Mirror是其中一个方案.但跨域创建Mirror要相对复杂的多,需要借助证书进行搭建. 下面我们将具体的步骤总结如下: 第一部分 创建证书 S ...

  6. MySQL下perror工具查看System Error Code信息

      在MySQL数据库的维护过程中,我们有时候会在MySQL的错误日志文件中看到一些关于Operating system error的错误信息,例如在MySQL的错误日志里面,有时候会看到关于 Inn ...

  7. 获取spring security用户相关信息

    在JSP中获得 使用spring security的标签库 在页面中引入标签 <%@ taglib prefix="sec" uri="http://www.spr ...

  8. 高德地图 Service 创建服务 USERKEY_PLAT_NOMATCH

    在使用高的地图 创建服务的时候 { "errmsg": "USERKEY_PLAT_NOMATCH", "errcode": 10009, ...

  9. 【导航】Python常用资源(从新手到大牛)

    [博客导航] [Python相关] 个人网站/博客/学习平台 中国大学MOOC :高校课程网上公开课学习平台,<Python语言程序设计>是我的入门课. Python123平台  :跟中国 ...

  10. IDEA包名显示设置

    项目结构视图右上角那个齿轮 选择[Compact Empty Middle Packages],包会合并显示 [Hide Empty Middle Packages]去掉前面的√,不分层级显示