码迷,mamicode.com
首页 > 编程语言 > 详细

Spring框架--依赖注入

时间:2020-08-12 15:59:45      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:graph   idv   code   footer   nat   count   block   enc   note   

技术图片

 

 

 

 

Spring 依赖注入

通过依赖注入的方式来管理Bean之间的依赖关系

 

依赖注入方法:

基于构造方法的依赖注入

Constructor-based dependency injection

基于设值方法的依赖注入

Setter-based dependency injection

 

 

基于构造函数的依赖注入

通过类的构造方法将需要使用的类传递到当前类

packagecom.springtest;

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

publicclassMainText{

publicstaticvoidmain(Stringargs[]){

ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml");

TextEditorobj1=(TextEditor)context.getBean("TextE");

obj1.spellCheck();

}

}

 

 

packagecom.springtest;

publicclassTextEditor{

privateSpellCheckerspell;

publicTextEditor(SpellCheckerspell){

System.out.println("InsideTextEditorconstructor.");

this.spell=spell;

}

publicvoidspellCheck(){

spell.checkSpelling();

}

}

 

 

packagecom.springtest;

publicclassSpellChecker{

publicSpellChecker(){

System.out.println("InsideSpellCheckerconstructor.");

}

publicvoidcheckSpelling(){

System.out.println("InsidecheckSpelling.");

}

}

 

xml文件:

<beanid="TextE"class="com.springtest.TextEditor">

<constructor-argref="SpellC"/>   ###定义构造方法的参数

</bean>

<beanid="SpellC"class="com.springtest.SpellChecker"/>

 

 

当存在多个类需要注入时,有以下三种传递的方法

1,按照构造方法的参数顺序,在xml文件中依次声明

   <bean id="Foo1" class="x.y.Foo">
      <constructor-arg ref="
arg1"/>
      <constructor-arg ref="
arg2"/>
   </bean>

 

2,使用构造方法参数的索引值传递

   <bean id="exampleBean" class="examples.ExampleBean">
      <constructor-arg index="0" value="
arg1"/>
      <constructor-arg index="1" value="
arg2"/>
   </bean>

 

3,使用type+value的形式传递

 

在当前类需要使用外部类时,可以通过本类的构造方法将外部类传递到本类,而不需要使用new方法获取

 

 

基于设值函数的依赖注入

使用设值方法传递外部类

packagecom.springtest;

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

publicclassMainText2{

publicstaticvoidmain(String[]args){

ApplicationContextcontext=

newClassPathXmlApplicationContext("beans.xml");

TextEditor2te=(TextEditor2)context.getBean("textEditor2");

te.spellCheck();

}

}

 

packagecom.springtest;

publicclassTextEditor2{

privateSpellCheckerspellChecker;

publicvoidsetSpellChecker(SpellCheckerspellChecker){

System.out.println("InsidesetSpellChecker.");

this.spellChecker=spellChecker;

}

publicSpellCheckergetSpellChecker(){

returnspellChecker;

}

publicvoidspellCheck(){

spellChecker.checkSpelling();

}

}

 

 

packagecom.springtest;

publicclassSpellChecker{

publicSpellChecker(){

System.out.println("InsideSpellCheckerconstructor.");

}

publicvoidcheckSpelling(){

System.out.println("InsidecheckSpelling.");

}

}

 

xml文件:

<beanid="textEditor2"class="com.springtest.TextEditor2">

<propertyname="spellChecker"ref="spellChecker"/>

</bean>

<!--DefinitionforspellCheckerbean-->

<beanid="spellChecker"class="com.springtest.SpellChecker">

</bean>

 

 

注入内部 Beans

bean中注入子bean,将子bean类实例赋值给bean类的spellChecker 属性

<!--DefinitionfortextEditorbean-->

<beanid="textEditor2"class="com.springtest.TextEditor2">

<propertyname="spellChecker">

<beanid="spellChecker"class="com.springtest.SpellChecker"/>

</property>

</bean>

 

 

注入集合

Spring 提供了四种类型的集合的配置元素,如下所示:

元素

描述

<list>

它有助于连线,如注入一列值,允许重复。

<set>

它有助于连线一组值,但不能重复。

<map>

它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。

<props>

它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。

 

<beanid="javacollection"class="com.springtest.JavaCollection">

<propertyname="addrList">

<list>

<value>China</value>

</list>

</property>

<propertyname="addrMap">

<map>

<entrykey="1"value="China"/>

</map>

</property>

<propertyname="addrSet">

<set>

<value>China</value>

</set>

</property>

<propertyname="addrProp">

<props>

<propkey="one">China</prop>

</props>

</property>

</bean>

 

Spring框架--依赖注入

标签:graph   idv   code   footer   nat   count   block   enc   note   

原文地址:https://www.cnblogs.com/lmg0/p/13489953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!