定义接口:
package Bean.staticFactoryBean;
public interface Axe {
public String chop();
}
package Bean.staticFactoryBean;
public interface Person {
public void useAxe();
}
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 "这是一把木头斧子";
}
}
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();
}
}
}
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>
<!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();
}
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();
}
From: http://blog.csdn.net/daryl715/article/details/1539011
相关推荐
调用实例工厂方法创建bean,与调用静态工厂方法创建bean 的用法基本相似。 区别如下: ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法...
Spring IOC 04 配置通过静态工厂方法创建的bean、实例工厂创建的bean、FactoryBean (1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这...
通过实例工厂方法和静态工厂方法实例化spring bean的例子。
主要介绍了Spring实战之使用静态工厂方法创建Bean操作,结合实例形式分析了静态工厂方法创建Bean的相关实现步骤与操作注意事项,需要的朋友可以参考下
主要介绍了Spring工厂方法创建bean实例代码,具有一定借鉴价值,需要的朋友可以参考下
自定义注解得使用,模拟spring通过注解方式创建bean实例!
NULL 博文链接:https://88548886.iteye.com/blog/1682243
Spring项目bean实例化代码,包括bean是如何创建的;实例化bean的三种方式,构造方法,静态工厂和实例工厂。
主要介绍了Spring Bean的初始化和销毁,结合实例形式详细分析了Spring Bean的初始化和销毁相关配置、使用方法及操作注意事项,需要的朋友可以参考下
NULL 博文链接:https://bijian1013.iteye.com/blog/2384411
3、通过spring的xml bean配置或bean注解指定初始化方法,如下面实例的initMethod方法通过@bean注解指定。 销毁的时候实现的方法 1、通过java提供的@PreDestroy注释; 2、通过实现spring提供的DisposableBean接口,并...
SSH笔记-静态工厂方法配置bean和实例工厂方法配置bean
spring运行过程中动态注册bean,代码实例
NULL 博文链接:https://hermosa-young.iteye.com/blog/2043821
主要介绍了Spring Bean管理注解方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
spring管理bean应用实例代码;spring管理bean应用实例代码
Spring的三种实例化Bean的方式
实例化Bean有三种方式,分别为构造器实例化、静态工厂方式实例化和实例工厂方式实例化(其中最常用的是构造器实例化)。 2.2.1 构造器实例化 创建Web项目,导入相关Jar包; 创建名为Bean1的Java类; 创建Spring配置...
Spring 实例化Bean的三种方式
主要介绍了Spring实战之调用实例工厂方法创建Bean操作,结合实例形式分析了实例工厂方法创建Bean相关配置、实现方法及操作注意事项,需要的朋友可以参考下