将学习变成乐趣,一直在路上
每天1990

导航

 
依赖注入: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>
posted on 2020-07-19 15:28  每天1990  阅读(201)  评论(0编辑  收藏  举报