依赖注入:spring通过依赖注入来管理Bean之间的依赖关系;
我理解的依赖注入,就是你运行一个类A的时候,需要一些数据,数据可能是基本类型的一个String,也可能是一个自定义的类,比如需要另一个类B,那类B怎么不通过new的显示初始话方式,你就能获得它的实例
一、类依赖其他对象注入的两种方式:
1、初始化时需要类B做入参(构造函数)
例子:
java类:
public class TextEditor { SpellChecker spellChecker; public TextEditor(SpellChecker spellChecker) { System.out.println("Inside TextEditor constructor."); this.spellChecker = spellChecker; } public void spellCheck() { spellChecker.checkSpelling(); } public static void main(String[] args) { new TextEditor(new SpellChecker()).spellCheck();\手动创建一个类实例给构造函数 ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); TextEditor textEditor = (TextEditor) context.getBean("textEditor"); textEditor.spellCheck(); } }
说明:如果不用bean管理时,你需要手动用new创建一个实例传递到方法里
配置元数据:
<bean id="textEditor" class="demo.TextEditor"> <constructor-arg ref="spellChecker"/> </bean>
2、成员变量依赖类B赋值(setter设值函数)
例子:
java类:
public class TextEditor { SpellChecker spellChecker; public void setSpellChecker(SpellChecker spellChecker) { this.spellChecker = spellChecker; } public void spellCheck() { spellChecker.checkSpelling(); } public static void main(String[] args) { new TextEditor().setSpellChecker(new SpellChecker());\手动创建一个类实例给设值函数 ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); TextEditor textEditor = (TextEditor) context.getBean("textEditor"); textEditor.spellCheck(); } }
配置元数据:
<bean id="textEditor" class="demo.TextEditor"> <property name="spellChecker" ref="spellChecker"/> </bean>
二、依赖注入的元数据配置的详细说明:
仔细观察XML中文件的配置,发现差异就在bean的属性配置上
1、不同函数的参数传递:构造函数,其他方法函数
依赖注入 | 描述 |
constructor-arg |
构造函数初始化需要参数的时候用到这个
通过ref或value等传递构造函数入参
|
property | 构造函数外方法的入参传递,使用这个属性 |
2、不同参数类型的值传递
属性值类别 | 给哪种类型参数传递值 | 例子 |
ref |
自定义类的类型;引用具体的类时使用
ref的值为XML配置元数据定义的bean id值
|
<property name="spellChecker" ref="spellChecker"/> |
value | String类型的参数 | <property name="message" value="hello meitian"/> |
list | 列表类型,java.util.List |
<property name="l">
<list>
<value>INDIA</value>
<value>Pakistan</value>
<value>USA</value>
<value>USA</value>
</list>
</property>
|
set | java.util.Set |
<property name="addressSet">
<set>
<ref bean="address1"/>
<ref bean="address2"/>
<value>Pakistan</value>
</set>
</property>
|
map | java.util.Map |
<property name="addressMap">
<map>
<entry key="one" value="INDIA"/>
<entry key ="two" value-ref="address1"/>
<entry key ="three" value-ref="address2"/>
</map>
</property>
|
props | java.util.Properties |
<property name="addressProp">
<props>
<prop key="one">INDIA</prop>
<prop key="two">Pakistan</prop>
<prop key="three">USA</prop>
<prop key="four">USA</prop>
</props>
</property>
|