spring-第六篇之创建bean的3种方式
1、创建bean的方式有3种:
1》使用构造器创建bean,即设值注入、构造注入本质都是使用bean的构造器创建bean的。
2》使用静态工厂方法创建bean。
3》调用实例工厂方法创建bean。
2、使用静态工厂方法创建bean
使用静态工厂方法创建bean实例,<bean.../>元素需要指定如下两个属性:
class:值为静态工厂类
factory-method:该属性指定静态工厂方法生产bean实例。如果静态工厂方法需要参数,则使用<constructor-arg.../>元素传入。
举个例子:
Being.java
package com.lfy.bean;public interface Being {public void testBeing(); }
Cat.java
package com.lfy.impl;import com.lfy.bean.Being;public class Cat implements Being {private String msg;public void setMsg(String msg) {this.msg=msg;}@Overridepublic void testBeing() {System.out.println(msg+",猫喜欢吃老鼠");}}
Dog.java
package com.lfy.impl;import com.lfy.bean.Being;public class Dog implements Being {private String msg;public void setMsg(String msg) {this.msg=msg;}@Overridepublic void testBeing() {System.out.println(msg+",狗爱啃骨头");}}
BeingFactory.java
package com.lfy.factory;import com.lfy.bean.Being; import com.lfy.impl.Cat; import com.lfy.impl.Dog;/*** 静态工厂类* @author lfy**/ public class BeingFactory {//返回Being实例的静态工厂方法//arg参数决定返回哪个Being类的实例public static Being getBeing(String arg) {if(arg.equalsIgnoreCase("dog")) {return new Dog();}else {return new Cat();}} }
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- spring配置文件的根元素,使用spring-beans-4.0.xsd语义约束 --> <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.../>元素指定了factory-method属性,spring就不再调用构造器来创建bean实例 --><bean id="dog" class="com.lfy.factory.BeingFactory" factory-method="getBeing"><!-- 配置静态工厂方法的参数 --><constructor-arg value="dog"/><property name="msg" value="我是狗"/></bean><bean id="cat" class="com.lfy.factory.BeingFactory" factory-method="getBeing"><!-- 配置静态工厂方法的参数 --><constructor-arg value="cat"/><property name="msg" value="我是猫"/></bean> </beans>
SpringTest.java
package com.lfy.main;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;import com.lfy.bean.Being; import com.lfy.impl.Cat; import com.lfy.impl.Dog;/*** 2、使用静态工厂方法创建bean* @author lfy**/ public class SpringTest {public static void main(String[] args) {ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");Being b1=ctx.getBean("dog", Dog.class);b1.testBeing();Being b2=ctx.getBean("cat", Cat.class);b2.testBeing();}}
运行结果:
3、调用实例工厂方法创建bean
实例工厂方法与静态工厂方法只有一点不同:调用静态工厂方法只需要工厂类即可,而实例工厂方法则需要工厂实例。
配置实例工厂方法与静态工厂方法也只有一点不同:配置静态工厂方法使用class指定静态工厂类,而配置实例工厂方法则使用factory-bean指定工厂实例。
使用实例工厂方法创建bean实例,<bean.../>元素需要指定如下两个属性:
factory-bean:该属性值为工厂bean的id。
factory-method:该属性指定实例工厂的工厂方法。如果实例工厂方法需要参数,则使用<constructor-arg.../>元素传入。
以前面的静态工厂方法例子进行些许的修改:
将BeingFactory.java的getBeing(...)的static属性去掉,则得到的是实例工厂方法。
package com.lfy.factory;import com.lfy.bean.Being; import com.lfy.impl.Cat; import com.lfy.impl.Dog;/*** 静态工厂类* @author lfy**/ public class BeingFactory {//返回Being实例的静态工厂方法//arg参数决定返回哪个Being类的实例public Being getBeing(String arg) {if(arg.equalsIgnoreCase("dog")) {return new Dog();}else {return new Cat();}} }
修改beans.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- spring配置文件的根元素,使用spring-beans-4.0.xsd语义约束 --> <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 id="beingFactory" class="com.lfy.factory.BeingFactory"/><bean id="dog" factory-bean="beingFactory" factory-method="getBeing"><constructor-arg value="dog"/><property name="msg" value="我是狗"/></bean><bean id="cat" factory-bean="beingFactory" factory-method="getBeing"><constructor-arg value="cat"/><property name="msg" value="我是猫"/></bean> </beans>
运行结果与静态工厂方法的一致。
转载于:https://www.cnblogs.com/ZeroMZ/p/11328186.html
spring-第六篇之创建bean的3种方式相关推荐
- Spring注解创建Bean的几种方式
Spring注解创建Bean的几种方式 1.@Component系列 @Component @Service @Repository @Controller @Configuration 2. 依附于 ...
- 把对象的创建交给spring来管理—— 1.创建bean的三种方式 2.bean对象的作用范围 3.bean对象的生命周期
把对象的创建交给spring来管理 spring对bean的管理细节 1.创建bean的三种方式 2.bean对象的作用范围 3.bean对象的生命周期 创建Bean的三种方式 ...
- Spring创建Bean的3种方式
1. Spring创建Bean的三种方式 1. 调用构造器(因为常用就不讲) 2. 调用静态工厂方法 3. 调用实例工厂方法 2. 使用静态工厂方法 1.此时<bean.../>元素要指定 ...
- Spring 创建Bean的三种方式
创建Bean的三种方式 第一种方式:使用默认构造函数创建. 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时.采用的就是默认构造函数创建bean对象,此 ...
- Spring创建Bean的三种方式的使用和区别
在学习Spring的时候,发现Spring的IOC(控制反转)为我们提供的三种创建Bean的方式. 1.Spring创建Bean的三种方式 这里采用XML配置,分别演示三种创建Bean的方式和代码. ...
- java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现
工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...
- 五、创建Bean的三种方式
五.创建Bean的三种方式 转载于:https://www.cnblogs.com/ljiwej/p/7280614.html
- Java-JUC(六):创建线程的4种方式
Java创建线程的4种方式: Java使用Thread类代表线程,所有线程对象都必须是Thread类或者其子类的实例.Java可以用以下4种方式来创建线程: 1)继承Thread类创建线程: 2)实现 ...
- Spring 创建Bean的几种方式
一.使用构造器实例化Bean 这是最简单的方式,Spring IoC容器即能使用默认空构造器也能使用有参数构造器两种方式创建Bean. 1.使用空构造器进行定义 2.使用有参数构造器进行定义 二.使用 ...
- 第5篇K8S创建资源的两种方式
一.创建方式分类: 命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1.用 kubectl 命令直接创建,比如: kubectl run httpd-app --image=r ...
最新文章
- 还在用Jenkins?看看这些替代方案,是否更适合你!
- 最大信息系数——检测变量之间非线性相关性
- DayDayUp:朋友圈有趣的职场跳槽微小说《华为跳阿里→阿里跳腾讯→腾讯跳百度→百度跳华为》
- 关于电商你应该知道的!!!(深度好文)
- 服务器上安装ffmpeg后报错及解决方案libavdevice.so.58: cannot open shared object file: No such file or directory
- python nose测试框架全面介绍十---用例的跳过
- mysql的seq2_DESeq2处理TCGA数据库Seq-count数据
- xss漏洞php注射实战,利用XSS渗透DISCUZ 6.1.0实战
- Android 自己定义View (二) 进阶
- C# Winform播放多媒体文件 [AudioVideoPlayback ]
- 关于HTTP请求报文和响应报文学习笔记
- Sentence2Vec理解
- android移动商城源码,o2o移动社区Android端app开源源码
- Java Swing实现简易计算器
- 北京地区的图像处理公司
- 时装连连看,基于MindSpore实现FashionMNIST图像分类
- linux parallel指令参数,GNU Parallel的具体使用
- ibm3400服务器改win7系统,dell3578win10改win7系统bios如何设置_戴尔win10改win7系统bios设置步骤...
- 影之刃服务器维护,影之刃无法联机到服务器怎么办 解决办法
- java request reponse 乱码的问题解决
热门文章
- Cause: the class org.apache.tools.ant.taskdefs.optional.junit.JUnitTask was not found
- 修改配置文件,编译freeswitch支持H264
- Telepresence修改完善心得
- Linux直接复制eclipse也可以使用
- SHELL中获取函数返回值
- 编译OpenJDK12:可以用VS2010到VS2017
- NWT失败反省:一下子买1万个用户许可,全浪费了
- 8月18日梦记录及分析
- Memento(备忘录)
- win10 桌面的的文件都不见了 提示不注销保存都文件都为临时_Windows10隐藏的8个小技巧,每一个都非常实用又高效...