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

本文介绍了一个使用工厂方法模式创建对象的实例。通过定义抽象产品接口和具体产品类,结合工厂类来实例化不同类型的对象,并利用Spring框架进行依赖注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义接口:

 

package Bean.FactoryMethods;

public interface Axe {
   
public String chop();
}



package Bean.FactoryMethods;

public interface Person {
   
public void useAxe();
}



 实现类:

package Bean.FactoryMethods;

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.FactoryMethods;

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.FactoryMethods;

public class SteelAxe implements Axe {

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

    }


}



package Bean.FactoryMethods;

public class WoodAxe implements Axe {

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

    }


}

 

工厂类(非静态工厂方法)

 

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

       
else{
           
return new AmericanPerson();
       }

   }

}


配置文件:

 

<?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="factory" class="Bean.FactoryMethods.BeingFactory">
  
</bean>
  
<bean id="chinese" factory-bean="factory" factory-method="getPerson">
    
<constructor-arg>
      
<value>chinese</value>
    
</constructor-arg>
    
<property name="axe">
      
<ref local="woodaxe"/>
    
</property>
  
</bean>
  
   
<bean id="american" factory-bean="factory" factory-method="getPerson">
    
<constructor-arg>
      
<value>american</value>
    
</constructor-arg>
    
<property name="axe">
      
<ref local="steelaxe"/>
    
</property>
  
</bean>
  
<bean id="woodaxe" class="Bean.FactoryMethods.WoodAxe"></bean>
  
<bean id="steelaxe" class="Bean.FactoryMethods.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+"/factoryMethodbeans.xml");
        
        
        Person person1
=(Person)context.getBean("chinese");
        person1.useAxe();
        Person person2
=(Person)context.getBean("american");
        person2.useAxe();
       
    }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值