zoukankan      html  css  js  c++  java
  • 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}
    

      







  • 相关阅读:
    生成指定范围的随机数
    sql
    map的使用
    基础03 JVM到底在哪里?
    Elasticsearch6.1.0 TransportClient聚合查询索引中所有数据
    Elasticsearch6.1.0 TransportClient滚动查询索引中所有数据写入文件中
    elasticsearch-java api中get() 和execute().actionGet()方法
    Elasticsearch6(Transport Client)常用操作
    Reflections反射获取注解下类
    Ambari2.6.0 安装HDP2.6.3: Python script has been killed due to timeout after waiting 300 secs
  • 原文地址:https://www.cnblogs.com/rsapaper/p/10057270.html
Copyright © 2011-2022 走看看