Spring创建Bean的三种方式
2017-09-08 00:43
393 查看
一、 使用构造器创建Bean的实例
在依赖注入已经叙述多种注入实例
二、使用静态工厂方法创建Bean
实例如下:
三、调用实例工厂方法创建bean
区别:
调用静态工厂类只需要使用工厂类即可,而调用实例工厂方法则需要工厂实例。配置静态工厂方法使用class指定静态工厂类,而配置实例工厂方法则使用factory-bean指定工厂实例。
实例如下:
在依赖注入已经叙述多种注入实例
二、使用静态工厂方法创建Bean
实例如下:
**静态工厂方法所产生的产品是该接口的实例** package com.home.bean; /** * 定义Beging接口,静态工厂方法所产生的产品是该接口的实例 */ public interface Being { public void testBeing(); } **下面为两个实现类,静态工厂将会产生这两个实现类的实例** package com.home.bean; public class Dog implements Being{ private String msg; public void setMsg(String msg) { this.msg = msg; } public void testBeing() { // TODO Auto-generated method stub System.out.println(msg+",狗吃骨头"); } } package com.home.bean; public class Cat implements Being{ private String msg; public void setMsg(String msg) { this.msg = msg; } public void testBeing() { // TODO Auto-generated method stub System.out.println(msg+",猫爱吃鱼"); } } 下面是工厂类,该静态方法getBeing()用于返回一个Being的实例 package com.home.bean; public class BeingFactory { //返回Beging实例的静态工厂方法 //type参数决定返回哪一个Beging类的实例 public static Being getBeing(String type){ //调用此静态方法的参数为dog,则返回Dog的实例 if(type.equalsIgnoreCase("dog")){ return new Dog(); }else{ return new Cat(); } } } 配置文件: <!-- 下面配置驱动Spring调用beingFactory的静态方法getBeging方法来创建bean 该bean元素包含constructor-arg元素用于静态工厂方法的参数 --> <!-- 1、class属性值不再是bean实例的实现类 2、constructor-arg元素用于静态工厂方法的参数 3、使用factory-method属性指定创建bean实例的静态工厂方法 --> <bean id="dog" class="com.home.bean.BeingFactory" factory-method="getBeing"> <!-- 配置静态工厂方法的参数 --> <constructor-arg value="dog" /> <property name="msg" value="我是狗"/> </bean> <bean id="cat" class="com.home.bean.BeingFactory" factory-method="getBeing"> <!-- 配置静态工厂方法的参数 --> <constructor-arg value="cat" /> <property name="msg" value="我是猫"/> </bean> 测试类如下: package spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.home.bean.Being; public class springTest2 { public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); Being b1=ctx.getBean("dog", Being.class); Being b2=ctx.getBean("cat", Being.class); b1.testBeing(); b2.testBeing(); /** * 我是狗,狗吃骨头 我是猫,猫爱吃鱼 */ } }
三、调用实例工厂方法创建bean
区别:
调用静态工厂类只需要使用工厂类即可,而调用实例工厂方法则需要工厂实例。配置静态工厂方法使用class指定静态工厂类,而配置实例工厂方法则使用factory-bean指定工厂实例。
实例如下:
package com.home.bean; //实例工厂方法所产生的对象将实现此接口 public interface People { public String sayHello(String name); public String sayGoodBye(String name); } 两个实现类: package com.home.bean; public class Chinese implements People{ public String sayHello(String name) { // TODO Auto-generated method stub return name+",你好!"; } public String sayGoodBye(String name) { // TODO Auto-generated method stub return name+",再见!"; } } package com.home.bean; public class American implements People{ public String sayHello(String name) { // TODO Auto-generated method stub return name+",Hello!"; } public String sayGoodBye(String name) { // TODO Auto-generated method stub return name+",Good Bye!"; } } 实例工厂类如下: 负责生产People对象的实例工厂 package com.home.bean; public class PersonFactory { //获得People的实例工厂方法 public People getPerson(String type){ if(type.equals("chin")){ return new Chinese(); }else{ return new American(); } } } 配置文件如下: <!-- 配置实例化工厂 --> <!--配置工厂bean,该bean负责产生其他bean的实例 --> <bean id="personFactory" class="com.home.bean.PersonFactory"></bean> <!-- 下面配置驱动Spring调用getPerson方法来创建bean--> <bean id="chinese" factory-bean="personFactory" factory-method="getPerson"> <constructor-arg value="chin" /> </bean> <bean id="american" factory-bean="personFactory" factory-method="getPerson"> <constructor-arg value="ame" /> </bean> 测试类如下: package spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.home.bean.People; public class springTest3 { public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); People p1=ctx.getBean("chinese",People.class); System.out.println(p1.sayHello("中国人"));; People p2=ctx.getBean("american",People.class); System.out.println(p2.sayHello("American")); /**print: * 中国人,你好! American,Hello! */ } }
相关文章推荐
- spring在配置文件中bean对象创建的三种方式
- spring创建bean的三种方式-通过构造器,通过静态工厂方法,通过实例工厂方法
- Spring-6.创建bean的三种方式
- Spring三 Bean的三种创建方式
- spring创建bean的三种方式
- Spring创建Bean的三种方式
- Spring创建bean的三种方式
- Spring(IOC) 对象创建三种方式、对象bean起别名
- spring学习之---创建Bean的三种方式
- spring创建bean的三种方式
- 创建Bean的三种方式 在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法。实际上,Sprin
- spring详解:bean的三种创建方式
- Spring创建bean 的三种方式
- Spring进阶之路(5)-Spring创建Bean的三种方式
- Spring中bean工厂创建bean的三种方式
- Spring中创建bean的三种方式
- Spring管理Bean的三种创建方式
- Spring管理Bean的三种创建方式
- Spring进阶之路(5)-Spring创建Bean的三种方式
- Spring中的Bean实现的创建三种方式