文档章节

Spring Bean工厂创建Bean实例的方法之使用静态工厂类

architect刘源源
 architect刘源源
发布于 2018/02/04 21:48
字数 324
阅读 32
收藏 1

定义接口:

 

package Bean.staticFactoryBean;

public interface Axe {
   public String chop();
}


package Bean.staticFactoryBean;

public interface Person {
   public void useAxe();
}


 实现类:

 

package Bean.staticFactoryBean;

public class AmericanPerson implements Person {
    private Axe axe;
    public Axe getAxe() {
        return axe;
    }
    public void setAxe(Axe axe) {
        this.axe = axe;
    }
    
    public void useAxe() {
        System.out.println(axe.chop());
        
    }

}


package Bean.staticFactoryBean;

public class ChinesePerson implements Person {
    private Axe axe;
    public Axe getAxe() {
        return axe;
    }
    public void setAxe(Axe axe) {
        this.axe = axe;
    }
    
    public void useAxe() {
        System.out.println(axe.chop());
        
    }

}

package Bean.staticFactoryBean;

public class SteelAxe implements Axe {

    public String chop() {
        return "这是一把铁斧子";

    }

}
package Bean.staticFactoryBean;

public class WoodAxe implements Axe {

    public String chop() {
        return "这是一把木头斧子";

    }

}


工厂类:

 

package Bean.staticFactoryBean;
import Bean.staticFactoryBean.*;
public class BeingFactory {
    
   public static Person getPerson(String arg){
       if(arg.equalsIgnoreCase("chinese")){
           return new Bean.staticFactoryBean.ChinesePerson();
       }
       else{
           return new Bean.staticFactoryBean.AmericanPerson();
       }
   }
}


配置文件,和使用构造函数创建bean不同的是,这里的class是静态方法的实现类,多加了factory-method属性,工厂方法的参数通过<constructor-arg>定义

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <bean id="chinese" class="Bean.staticFactoryBean.BeingFactory" factory-method="getPerson">
    <constructor-arg>
      <value>chinese</value>
    </constructor-arg>
    <property name="axe">
      <ref local="woodaxe"/>
    </property>
  </bean>
  
   <bean id="american" class="Bean.staticFactoryBean.BeingFactory" factory-method="getPerson">
    <constructor-arg>
      <value>american</value>
    </constructor-arg>
    <property name="axe">
      <ref local="steelaxe"/>
    </property>
  </bean>
  <bean id="woodaxe" class="Bean.staticFactoryBean.WoodAxe"></bean>
  <bean id="steelaxe" class="Bean.staticFactoryBean.SteelAxe"></bean>
</beans>


测试代码:

 

public static void main(String[] args) throws Exception {
        
        String path=new Test().getClass().getResource("/").getPath();
        String realpath=path.substring(1, path.length());
        ApplicationContext context=new FileSystemXmlApplicationContext(realpath+"/staticMethodbeans.xml");
        
        
        Person person1=(Person)context.getBean("chinese");
        person1.useAxe();
        Person person2=(Person)context.getBean("american");
        person2.useAxe();
       
    }

© 著作权归作者所有

architect刘源源

architect刘源源

粉丝 167
博文 554
码字总数 934264
作品 0
浦东
程序员
私信 提问
Spring使用静态工厂方法创建Bean

使用静态工厂方法创建Bean 使用静态工厂方法创建Bean实例时,class属性也必须指定,但此时class属性并不是指定Bean实例的实现类,而是静态工厂类。因为Spring需要知道是用哪个工厂来创建Bea...

摆渡者
2014/03/04
10.4K
4
2014-03-09 Spring的学习(1)------Spring管理Bean(实例化Bean)

1.搭建与测试Spring的开发环境 PS: Spring-beans-2.5.xsd (为使在Beans.xml操作顺畅) Perferences--->MyEclipse--->Files and Editors---->XML--->XML Catalog--->add User Specified Entrie......

查封炉台
2014/03/09
107
0
SpringFramework核心技术一(IOC:实例化bean)

实例化bean bean定义本质上是创建一个或多个对象的配方。容器在被询问时查看命名bean的配方,并使用由该bean定义封装的配置元数据来创建(或获取)实际对象。 一、实例化Bean的说明 如果使用...

王木东
2018/05/13
0
0
Spring基础知识汇总 Java开发必看

Spring简介 Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版。Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关...

像风一样i
2018/08/14
0
0
day33_Spring学习笔记_01

零、蓦然回首 Struts2:web层,比较简单(难点:ValueStack值栈、拦截器) Hibernate:dao层,知识点杂(学了不用,默认设置够用了) Spring:service层,重要,(讲多少用多少) Spring课程...

黑泽明军
2018/07/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
49分钟前
4
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
2.6K
19
oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
3
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部