标签: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>
标签:graph idv code footer nat count block enc note
原文地址:https://www.cnblogs.com/lmg0/p/13489953.html