• spring学习(2)依赖注入


    依赖注入: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>
  • 相关阅读:
    报数游戏
    Dynamics CRM 2013 初体验(2):UI
    Lucene.net常见功能实现知识汇总
    hdu 1853 最小费用流好题 环的问题
    MessagerService总结
    [置顶] Android EditText/TextView使用SpannableString显示复合文本
    MySQL Dll语句
    JavaScript表单验证
    intellij—idea14 注冊机
    OL记载Arcgis Server切片
  • 原文地址:https://www.cnblogs.com/meitian/p/13339851.html
Copyright © 2020-2023  润新知