详解Spring 两种注入的方式(Set和构造)实例
依赖注入是指对象之间关系的控制权由应用代码中转到外部容器。Spring框架主要提供了Set注入和构造注入两种依赖注入方式。
1:Set注入指的就是在接受注入的类中定义一个要被注入的类型的一个set方法,并在参数中定义需要注入的元素。Set注入式一种装配Bean属性的直接方法,但Set注入的一个缺点就是它假设了所有的可变属性都可以通过set方法访问到,无法清晰地表示哪些属性是必须的,哪些属性是可选的。
2:构造注入是在接收注入的类中定义一个构造方法,并在构造方法中定义需要注入的参数。构造注入方式的优势是通过构造方法来强制依赖关系。
下面介绍一下两种方式的用法:
一:在Myeclipse中(笔者使用的是Myeclipse10版本)新建一个项目(Javaproject或者webproject都可)
二:右键项目-MyEclipse-AddSpringCapabilities(添加Spring支持),选择3.0版本并添加引用核心类库,点击下一步。
三:选择新创建一个springbean配置文件放到项目src目录下。
四:点击下一步,指定hibernate配置页,直接默认,点击完成即可。
五:新建类HelloWorld.Java
packagecom.xiami.spring; publicclassHelloWorld{ privateStringstr; /** *默认构造方法 */ publicHelloWorld(){ } /** *用来进行构造注入的构造方法 * *@paramstr */ publicHelloWorld(Stringstr){ this.str=str; } /** *用来进行Set注入的方法 *@paramstr */ publicvoidsetStr(Stringstr){ this.str=str; } /** *输出字符串的方法 */ publicvoidsayHello(){ System.out.println(str); } }
六:新建测试类Test.java
packagecom.xiami.spring; importorg.springframework.beans.factory.BeanFactory; importorg.springframework.beans.factory.xml.XmlBeanFactory; importorg.springframework.core.io.ClassPathResource; publicclassTest{ /** *@paramargs */ publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub //载入spring配置文件 BeanFactorybFactory=newXmlBeanFactory(newClassPathResource("applicationContext.xml")); HelloWorldhelloWorld=(HelloWorld)bFactory.getBean("helloService"); helloWorld.sayHello(); } }
七:打开applicationContext.xml文件,进行添加bean配置
以下是两种方式添加bean:
1:采用Set注入方式的Bean类的配置
右击applicationContext.xml的编辑界面-Spring-newbean打开Bean向导窗口,填写BeanId(自定义命名和Test.java中getBean("???")对应。Beanclass选择要注入的HelloWorld类。点击Properties属性选项卡,给该bean新建一个属性。
八:在属性向导窗口填写Name对应HelloWorld.java中的属性名称,SpringType选择value,type选择String,Value随便填值。finish既可。
九:保存applicationContext.xml,添加bean后,配置文件多了红色标记的部分,读者可以运行Test.java。测试一下。发现helloworld字符串已经注入到了str变量上。
<?xmlversion="1.0"encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!--使用Set方式注入--> <!-- <spanstyle="color:#ff0000;"><beanid="helloService"class="com.xiami.spring.HelloWorld" abstract="false"lazy-init="default"autowire="default"> <propertyname="str"> <valuetype="java.lang.String">helloworld</value> </property> </bean></span> --> <!--使用构造方法方式注入 <beanid="helloService"class="com.xiami.spring.HelloWorld" abstract="false"lazy-init="default"autowire="default"> <constructor-arg> <valuetype="java.lang.String">构造方法注入方式</value> </constructor-arg> </bean> --> </beans>
2:采用构造注入方式的Bean类的配置
在以上Set方式的BeanWizard(Bean向导)窗口,不选择Properties选项卡,变为ConstructorArgs选项卡。并Add新增一个构造参数。Index和JavaClass不用填写。
十:在增加构造方式bean的时候,之前第一个得先注释或者删除,不允许有多个id相同的bean。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。