7.7.2:使用静态工厂方法创建Bean
2013-07-18 05:24
465 查看
Being.java :
public interface Being { public void testBeing(); }Dog.java :
public class Dog implements Being { private String msg; public void setMsg(String msg) { this.msg = msg; } @Override public void testBeing() { System.out.println(msg+",狗爱啃骨头"); } }Cat.java :
public class Cat implements Being { private String msg; public void setMsg(String msg) { this.msg = msg; } @Override public void testBeing() { System.out.println(msg+",猫爱吃老鼠"); } }BeingFactory.java :
public class BeingFactory { public static Being getBeing(String arg){ if(arg.equalsIgnoreCase("dog")){ return new Dog(); }else{ return new Cat(); } } }bean.xml核心配置:
<bean id="dog" class="com.bean.BeingFactory" factory-method="getBeing"> <constructor-arg value="dog"/> <property name="msg" value="我是狗"/> </bean> <bean id="cat" class="com.bean.BeingFactory" factory-method="getBeing"> <constructor-arg value="cat"/> <property name="msg" value="我是猫"/> </bean>从上面的核心配置可以看出,cat和dog两个Bean配置的class属性和factory-method属性完全相同,这是因为这两个实例都是由同一个工厂类的同一个静态方法生产得到的。配置这两个Bean实例指定了工厂的静态方法的实参值不同,配置静态方法的实参值使用<constructor-arg.../>元素。
Test.java :
public class Test { public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml"); Being b1=(Being) ctx.getBean("dog"); b1.testBeing(); Being b2=(Being) ctx.getBean("cat"); b2.testBeing(); } }运行Test.java,控制台输出:
总结:
使用静态工厂方法创建Bean实例时,class属性也必须指定,但此时class属性并不是Bean实例的实现类,而是静态工厂类。除此之外,还需要使用factory-method属性来指定工厂的静态方法名。
相关文章推荐
- 7.7.2: Bean实例的创建方式及依赖配置---使用静态工厂方法创建Bean
- Spring使用静态工厂方法创建Bean(一)
- 【spring notes】 使用静态工厂方法创建Bean
- 转:Spring使用静态工厂方法创建Bean
- Spring使用静态工厂方法创建Bean
- Spring学习--静态工厂方法、实例工厂方法创建 Bean
- Spring学习之使用静态工厂方法以及实例工厂方法配置bean
- 使用静态工厂方法创建连接池(关于代理和包装的使用)
- Spring 学习总结 使用静态工厂创建Bean
- 从spring容器中得到bean_使用类构造器实例化_使用静态工厂方法实例化_使用实例工厂方法实例化_例子
- 4.2 使用工厂方法创建Bean
- Spring使用实例工厂方法创建Bean(一)
- 使用静态工厂创建Bean
- 【Effective Java读书笔记】创建和销毁对象(一):考虑使用静态工厂方法代替构造器
- Spring入门学习——调用静态工厂方法创建Bean
- spring创建bean的三种方式-通过构造器,通过静态工厂方法,通过实例工厂方法
- spring学习小结7_使用工厂方法来配置bean:静态工厂方法和实例工厂方法
- Spring使用教程(二)配置bean:静态工厂方法和实例工厂方法
- Fragment传参:使用静态工厂方法来创建Fragment的实例
- SocketChannel类(用于阻塞或非阻塞式传输数据) 创建SocketChannel要使用SocketChannel类的静态工厂方法。 SocketChannel open():创建未连接的