Spring框架依赖注入

Posted lijie-helloworld

tags:

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

说明:Spring由核心容器IOC降低程序的耦合度(依赖关系),对依赖关系的管理就叫做依赖注入。理解为数据在配置时初始化初值,一般用于数据内容不常修改的情况。如数据库密码等。

注入语法:使用construtor-arg标签

标签位置:bean标签内部

标签中的属性:

      type: 用于指定要注入的数据的类型,且该类型是构造函数中某个/些参数类型

      index: 用于指定要注入的数据类型

      name:用于指定给构造函数中指定名称的参数赋值

    ==============================以上用于构造函数中参数赋值========================

      value:用于提供基本类型和String类型的数据

      ref: 用于指定其他bean类型数据(在ioc中配置过的bean)

能够注入的三种数据类型:

      a 基本类型和String

      b 在配置文件中配置过的bean类型

      c 复杂类型/集合类型

 

三种注入方式:

第一种:使用构造函数提供

<!--student类中无默认构造函数 构造函数为name+age+brithday,需将类成员初始化后才能创建-->
<bean id="student" class="com.lijie.factory.student">
    <constructor-arg name="name" value="lijie"></constructor-arg>
    <constructor-arg name="age" value="18"></constructor-arg>
    <constructor-arg name="brithday" value="2019/1/1"></constructor-arg>
</bean>

第二种:使用set方法提供 更常用

前提:bean对象中要存在该注入属性的set方法。

关键标签:property

注入普通数据类型:

<bean id="student1" class="com.lijie.factory.student1">
    <property name="age" value="18"></property>
    <property name="name" value="李杰"></property>
    <property name="brithday" value="2018/4/4"></property>
</bean>

 

注入复杂数据类型:

用于list结构集合注入的标签:list | array | set

用于Map结构集合注入的标签:map | props

 1 <!--使用set方法给复杂类型注入-->
 2 <bean id="student2" class="com.lijie.factory.student2">
 3     <!--List类型-->    
 4   <property name="mylist">
 5         <list>
 6             <value>AAA</value>
 7             <value>BBb</value>
 8             <value>CCC</value>
 9         </list>
10     </property>
11     <property name="myStr">
12         <list>
13             <value>AAA</value>
14             <value>BBb</value>
15             <value>CCC</value>
16         </list>
17     </property>
18     <property name="myMap">
19         <map>
20             <entry key="1" value="数据1"></entry>
21             <entry key="2" value="数据2"></entry>
22         </map>
23     </property>
24 </bean>

第三种:使用注解方法提供

出现位置:在需要注入的变量或方法上。

相当于<property name="" value=""|ref="" ></property>

  • @autowrite:在需要注入的数据前添加该注解,spring自动匹配容器中的values的类型并注入。若存在多个匹配值。则匹配容器中的ID值。

  • @Qualifier:在@autowrite下方指定名称进行注入,无法单独使用。属性:value:用于指定注入Bean的ID

    @Autowired
    @Qualifier(value = "helloImpl1")//在@autowrite下方使用@qualifier指定注入对象
    Ihello helloImpl=null;
  • @Resource:直接按照Bean的id注入,可以单独使用。 属性:name,用于指定注入bean的ID

    @Resource(name = "helloImpl1")
        Ihello helloImpl=null;

上述三个注入注解(@autowrite @Qualifier @Resource)都只能注入bean类型的,无法注入String和基本类型数据,而复杂类型数据,如数组,map只能由XML文件注入

  • @value:用于注入基本类型和String类型,属性:value

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

JAVA框架 Spring 依赖注入

spring中依赖注入的原理

浅谈spring框架的控制反转和依赖注入

Android 片段和依赖注入

Android片段和依赖注入

Spring框架使用(控制反转,依赖注入,面向切面AOP)