spring依赖注入

Posted 蔡地像徐坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring依赖注入相关的知识,希望对你有一定的参考价值。

1.1 依赖/属性注入的方式

创建对象的时候,向类里面属性里面设置值。

1.使用有参构造注入

2.使用set方法注入(重点)!!!

3.对象类型注入

4.复杂数据类型注入

1.2 有参构造注入

前提:在JavaBean中生成有参构造方法

<!--构造函数注入:
        使用的标签:constructor-arg
        标签出现的位置:bean标签的内部
        标签中的属性
            type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
            index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从0开始
            name:用于指定给构造函数中指定名称的参数赋值
            ============以上三个用于指定给构造函数中哪个参数赋值
            value:用于提供基本类型和String类型的数据
            ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的bean对象
         优势:
            在获取bean对象时,注入数据是必须的操作,否则对象无法创建成功。
          弊端:
            改变了bean对象的实例化方式,使我们在创建对象时,如果用不到这些数据,也必须提供。
            -->
    <bean id="accountService" class="com.jh.service.impl.AccountServiceImpl"
          scope="singleton" init-method="init" destroy-method="destory">
        <constructor-arg name="name" value="张三"></constructor-arg>
        <constructor-arg name="age" value="18"></constructor-arg>
        <constructor-arg name="birthday" ref="now"></constructor-arg>
    </bean>

    <!--配置一个日期对象-->
    <bean id="now" class="java.util.Date"></bean>

1.3 set方法注入(重点掌握)

前提:在JavaBean中生成Getter and Setter方法

    <!--set方法注入
        涉及的标签:property
        出现的位置:bean标签的内部
        标签的属性:
            name:用于指定注入时所调用的set方法名称
            value:用于提供基本类型和String类型的数据
            ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现过的bean对象
        优势:
            创建对象时没有明确的限制,可以直接使用默认构造函数
        弊端:
            如果有某个成员必须有值,则获取对象是有可能set方法没有执行。
        -->
    <bean id="accountService" class="com.jh.service.impl.AccountServiceImpl"
          scope="singleton" init-method="init" destroy-method="destory">
        <property name="name" value="张三"></property>
        <property name="age" value="18"></property>
        <property name="birthday" ref="now"></property>
    </bean>

    <!--配置一个日期对象-->
    <bean id="now" class="java.util.Date"></bean>

1.4 复杂数据类型注入

 private String[] myStrs;
 private List<String> myList;
 private Set<String> mySet;
 private Map<String, String> myMap;
 private Properties myProps;
<!--复杂类型的注入/集合类型的注入
        用于给List结构集合注入的标签:
            list array set
        用于给Map结构集合注入的标签:
            map props
        结构相同,标签可以互换
    -->
    <bean id="accountService2" class="com.jh.service.impl.AccountServiceImpl2">
        <property name="myStrs">
            <array>
                <value>AAA</value>
                <value>BBB</value>
                <value>CCC</value>
            </array>
        </property>

        <property name="myList">
            <list>
                <value>list1</value>
                <value>list2</value>
                <value>list3</value>
            </list>
        </property>

        <property name="mySet">
            <set>
                <value>set1</value>
                <value>set2</value>
                <value>set3</value>
            </set>
        </property>

        <property name="myMap">
            <map>
                <entry key="a" value="1"></entry>
                <entry key="b">
                    <value>2</value>
                </entry>
                <entry key="c" value="3"></entry>
            </map>
        </property>

        <property name="myProps">
            <props>
                <prop key="username">root</prop>
                <prop key="password">123456</prop>
            </props>
        </property>
    </bean>

 

以上是关于spring依赖注入的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Android 片段和依赖注入

Android片段和依赖注入

Spring依赖注入的方式

spring依赖注入,和控制反转。用自己的话说是怎么说的。最好能够用代码来解释

Spring设置注入和构造注入的区别