Spring(13) 通过实例工厂 创建Bean

  1. 通过实例工厂创建bean的时候要先创建一个工厂类的bean,然后在其他需要用这个工厂类实例化的bean的标签中,通过factory-bean属性指定已经配置好的工厂类的bean,再用factory-method方法指定是使用工厂类的哪一个方法来创建是实例。 
  2. 陌上花开,可缓缓观矣~
  3. package classPackage;
    
    import interfacePackage.Person;
    //就是简单的类咯,但是是要通过工厂模式实例化
    public class American implements Person {
        @Override
        public String sayHello(String name){
            return name + " say hello";
        }
        @Override
        public String sayGoodbye(String name){
            return name + "say goodbye";
        }
    }
    
    package classPackage;
    
    import interfacePackage.Person;
    //就是简单的类咯,但是是要通过工厂模式实例化
    public class Chinese implements Person {
        @Override
        public String sayHello(String name){
            return name + " 说你好";
        }
        @Override
        public String sayGoodbye(String name){
            return name + "说再见";
        }
    }
    
    package factoryPackage;
    
    import classPackage.American;
    import classPackage.Chinese;
    import interfacePackage.Person;
    //这就是工厂类,是个实例工厂。
    public class PersonFactory {
        public Person getPerson(String ethnic){
            if(ethnic.equalsIgnoreCase("chin")){
                return new Chinese();
            }else if(ethnic.equalsIgnoreCase("ameri")){
                return new American();
            }else {
                return null;
            }
        }
    }
    
    package interfacePackage;
    //实现工厂类需要的接口
    public interface Person {
        public String sayHello(String name);
        public String sayGoodbye(String name);
    }
    
    package testPackage;
    
    import classPackage.American;
    import classPackage.Chinese;
    import interfacePackage.Person;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    //测试类
    public class SpringTest {
        public static void main(String []args){
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
            Chinese chinese = (Chinese) applicationContext.getBean("chinese", Person.class);
            System.out.println(chinese.sayHello("可以"));
            American american = (American)applicationContext.getBean("america", Person.class);
            System.out.println(american.sayHello("ok"));
        }
    }
    
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
    
        <!--定义一个工厂类的bean,下面这些普通的bean就是由这个实例工厂类生产-->
        <bean id="personFactory" class="factoryPackage.PersonFactory"/>
    
        <!--配置一个由实例工厂的bean,要 指定是那个工厂bean的那个方法,和方法需要的参数,再指定
        这个bean的成员变量-->
        <bean id="chinese" factory-bean="personFactory" factory-method="getPerson">
            <constructor-arg value="chin"/>
        </bean>
    
        <bean id="america" factory-bean="personFactory" factory-method="getPerson">
            <constructor-arg value="ameri"/>
        </bean>
    
    </beans>

    这是我看李刚编著的《轻量级javaEE企业应用实战(第五版)-Struts2+Spring5+Hibernate5/JAP2》后总结出来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值