• Spring 依赖注入 基于构造函数、设值函数、内部Beans、集合注入


    Spring 基于构造函数的依赖注入_w3cschool https://www.w3cschool.cn/wkspring/t7n41mm7.html

    Spring 基于构造函数的依赖注入

    当容器调用带有一组参数的类构造函数时,基于构造函数的 DI 就完成了,其中每个参数代表一个对其他类的依赖。

    接下来,我们将通过示例来理解 Spring 基于构造函数的依赖注入。

    这是 TextEditor.java 文件的内容:

    package com.tutorialspoint;
    public class TextEditor {
       private SpellChecker spellChecker;
       public TextEditor(SpellChecker spellChecker) {
          System.out.println("Inside TextEditor constructor." );
          this.spellChecker = spellChecker;
       }
       public void spellCheck() {
          spellChecker.checkSpelling();
       }
    }

    Spring 基于设值函数的依赖注入

    当容器调用一个无参的构造函数或一个无参的静态 factory 方法来初始化你的 bean 后,通过容器在你的 bean 上调用设值函数,基于设值函数的 DI 就完成了。

    下面是配置文件 Beans.xml 的内容,该文件有基于设值函数注入的配置:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
       <!-- Definition for textEditor bean -->
       <bean id="textEditor" class="com.tutorialspoint.TextEditor">
          <property name="spellChecker" ref="spellChecker"/>
       </bean>
    
       <!-- Definition for spellChecker bean -->
       <bean id="spellChecker" class="com.tutorialspoint.SpellChecker">
       </bean>
    
    </beans>
    

    你应该注意定义在基于构造函数注入和基于设值函数注入中的 Beans.xml 文件的区别。唯一的区别就是在基于构造函数注入中,我们使用的是〈bean〉标签中的〈constructor-arg〉元素,而在基于设值函数的注入中,我们使用的是〈bean〉标签中的〈property〉元素。

    第二个你需要注意的点是,如果你要把一个引用传递给一个对象,那么你需要使用 标签的 ref 属性,而如果你要直接传递一个值,那么你应该使用 value 属性。

    注入内部 Beans

    正如你所知道的 Java 内部类是在其他类的范围内被定义的,同理,inner beans 是在其他 bean 的范围内定义的 bean。因此在 或 元素内 元素被称为内部bean,如下所示。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
       <bean id="outerBean" class="...">
          <property name="target">
             <bean id="innerBean" class="..."/>
          </property>
       </bean>
    
    </beans>

    注入集合

    你已经看到了如何使用 value 属性来配置基本数据类型和在你的 bean 配置文件中使用<property>标签的 ref 属性来配置对象引用。这两种情况下处理奇异值传递给一个 bean。

    现在如果你想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties,应该怎么做呢。为了处理这种情况,Spring 提供了四种类型的集合的配置元素,如下所示:

    元素描述
    <list> 它有助于连线,如注入一列值,允许重复。
    <set> 它有助于连线一组值,但不能重复。
    <map> 它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。
    <props> 它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。


    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Definition for javaCollection -->
    <bean id="javaCollection" class="com.tutorialspoint.JavaCollection">
    <property name="addressList">
    <list>
    <value>INDIA</value>
    <value>Pakistan</value>
    <value>USA</value>
    <value>USA</value>
    </list>
    </property>
    <property name="addressSet">
    <set>
    <value>INDIA</value>
    <value>Pakistan</value>
    <value>USA</value>
    <value>USA</value>
    </set>
    </property>
    <property name="addressMap">
    <map>
    <entry key="1" value="INDIA"></entry>
    <entry key="2" value="Pakistan"></entry>
    <entry key="3" value="USA"></entry>
    <entry key="4" value="USA"></entry>
    </map>
    </property>
    <property name="addressProp">
    <props>
    <prop key="one">INDIA</prop>
    <prop key="one">INDIA</prop>
    <prop key="two">Pakistan</prop>
    <prop key="three">USA</prop>
    <prop key="four">USA</prop>
    </props>
    </property>
    </bean>

    </beans>


    D:workspspringsrcmainjavacom utorialspointJavaCollection.java

    package com.tutorialspoint;

    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;

    public class JavaCollection {
    List addressList;
    Set addressSet;
    Map addressMap;
    Properties addressProp;

    public void setAddressList(List addressList) {
    this.addressList = addressList;
    }

    public List getAddressList() {
    System.out.println("List Elements :" + addressList);
    return addressList;
    }

    public void setAddressSet(Set addressSet) {
    this.addressSet = addressSet;
    }

    public Set getAddressSet() {
    System.out.println("Set Elements :" + addressSet);
    return addressSet;
    }

    public void setAddressMap(Map addressMap) {
    this.addressMap = addressMap;
    }

    public Map getAddressMap() {
    System.out.println("Map ELements :" + addressMap);
    return addressMap;
    }

    public void setAddressProp(Properties addressProp) {
    this.addressProp = addressProp;
    }

    public Properties getAddressProp() {
    System.out.println("Property Elements :" + addressProp);
    return addressProp;
    }
    }

    D:workspspringsrcmainjavacom utorialspointMainApp.java
    package com.tutorialspoint;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class MainApp {
    public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    JavaCollection jc = (JavaCollection) context.getBean("javaCollection");

    jc.getAddressList();
    jc.getAddressSet();
    jc.getAddressMap();
    jc.getAddressProp();
    }
    }


    "C:Program FilesJavajdk1.8.0_171injava" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2017.3.4libidea_rt.jar=57371:C:Program FilesJetBrainsIntelliJ IDEA 2017.3.4in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.8.0_171jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_171jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_171jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_171jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_171jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_171jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_171jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_171jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_171jrelibext
    ashorn.jar;C:Program FilesJavajdk1.8.0_171jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_171jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_171jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_171jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_171jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_171jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_171jrelibjce.jar;C:Program FilesJavajdk1.8.0_171jrelibjfr.jar;C:Program FilesJavajdk1.8.0_171jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_171jrelibjsse.jar;C:Program FilesJavajdk1.8.0_171jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_171jrelibplugin.jar;C:Program FilesJavajdk1.8.0_171jrelib
    esources.jar;C:Program FilesJavajdk1.8.0_171jrelib
    t.jar;D:workspspring	argetclasses;C:Userssas.m2
    epositoryorgspringframeworkspring-core4.1.4.RELEASEspring-core-4.1.4.RELEASE.jar;C:Userssas.m2
    epositorycommons-loggingcommons-logging1.2commons-logging-1.2.jar;C:Userssas.m2
    epositoryorgspringframeworkspring-context4.1.4.RELEASEspring-context-4.1.4.RELEASE.jar;C:Userssas.m2
    epositoryorgspringframeworkspring-aop4.1.4.RELEASEspring-aop-4.1.4.RELEASE.jar;C:Userssas.m2
    epositoryaopallianceaopalliance1.0aopalliance-1.0.jar;C:Userssas.m2
    epositoryorgspringframeworkspring-beans4.1.4.RELEASEspring-beans-4.1.4.RELEASE.jar;C:Userssas.m2
    epositoryorgspringframeworkspring-expression4.1.4.RELEASEspring-expression-4.1.4.RELEASE.jar;C:Userssas.m2
    epositoryorgspringframeworkspring-jdbc5.1.3.RELEASEspring-jdbc-5.1.3.RELEASE.jar;C:Userssas.m2
    epositoryorgspringframeworkspring-tx5.1.3.RELEASEspring-tx-5.1.3.RELEASE.jar" com.tutorialspoint.MainApp
    十二月 03, 2018 10:50:46 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5197848c: startup date [Mon Dec 03 10:50:46 CST 2018]; root of context hierarchy
    十二月 03, 2018 10:50:46 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [Beans.xml]
    List Elements :[INDIA, Pakistan, USA, USA]
    Set Elements :[INDIA, Pakistan, USA]
    Map ELements :{1=INDIA, 2=Pakistan, 3=USA, 4=USA}
    Property Elements :{two=Pakistan, one=INDIA, three=USA, four=USA}
    

      







  • 相关阅读:
    CodeForces 681D Gifts by the List (树上DFS)
    UVa 12342 Tax Calculator (水题,纳税)
    CodeForces 681C Heap Operations (模拟题,优先队列)
    CodeForces 682C Alyona and the Tree (树上DFS)
    CodeForces 682B Alyona and Mex (题意水题)
    CodeForces 682A Alyona and Numbers (水题,数学)
    Virtualizing memory type
    页面跳转
    PHP Misc. 函数
    PHP 5 Math 函数
  • 原文地址:https://www.cnblogs.com/rsapaper/p/10057270.html
Copyright © 2020-2023  润新知