Spring学习笔记【四】依赖注入

依赖注入

  1. 什么是注入
  • 通过Spring工厂以及配置文件,为所创建的对象的成员变量赋值
  1. 为什么需要注入
  • 通过编码的方式,为成员变量进行赋值,存在耦合

set注入

01 概述

  1. 实质上调用的是set方法
  2. 必须有set方法,没有是错误的
  3. 首先执行无参构造,然后执行set方法
  4. 只要set方法在就行了,也就说这个属性不一定要存在
  5. 针对不同类型的成员变量,在<property>标签之中,嵌套其他类型的标签

02 JDK内置类型

2.1 基本数据类型 和 String

  • 对于基本数据类型和String,都使用value标签进行标签进行赋值
  • 这里的 name就是对象的属性名
<bean id="user" class="com.spring.model.User">
    <property name="username">
        <value>编程小菜鸡</value>
    </property>
</bean>

2.2 数组类型

  • 对于数组类型,使用list标签进行注入,然后在list标签中,对数组元素进行注入,因为这里是基本类型,这里使用value标签
<bean id="user" class="com.spring.model.User">
    <property name="arr">
        <list>
            <value>1</value>
            <value>2</value>
            <value>3</value>
        </list>
    </property>
</bean>

2.3 set集合

  • 对set集合进行注入,使用set标签,针对Set集合的泛型,使用不同的标签进行注入
<bean id="user" class="com.spring.model.User">
    <property name="set">
        <set>
            <value>111</value>
        </set>
    </property>
</bean>

2.4 list集合

  • 对于List集合,使用**list标签**进行注入
  • 针对 List集合的泛型,选择不同的标签对集合中的元素进行注入
<bean id="user" class="com.spring.model.User">
    <property name="list">
        <list>
            <value>111</value>
        </list>
    </property>
</bean>

2.5 Map集合

  • 对于Map集合,使用map标签进行注入。
  • 对于每一个键值对,使用entry标签,进行注入
  • 在entry标签之中,使用key标签对键进行注入
<bean id="user" class="com.spring.model.User">
    <property name="map">
        <map>
            <entry>
                <key>
                    <value>1</value>
                </key>
                <value>1</value>
            </entry>
        </map>
    </property>
</bean>

2.6 Properties集合

Properties 类型,是特殊的Map集合,有因为键和值都是String类型

<bean id="user" class="com.spring.model.User">
    <property name="properties">
        <props>
            <prop key="key1">佩奇</prop>
            <prop key="key2">乔治</prop>
        </props>
    </property>
</bean>

03 用户自定义类型

3.1 方式一

<bean id="student" class="com.hl.spring.Student">   
    <property name="school" ref="school"/>
</bean>

<bean id="school" class="com.hl.spring.School">   
    <property name="name" value="佩奇"></property>    
</bean>

3.2 方式二

<bean id="user" class="com.spring.model.User">
    <property name="address">
        <bean class="com.spring.model.Address">
            <property name="address">
                <value>甘肃省兰州市</value>
            </property>
        </bean>
    </property>
</bean>

3.3 引用类型自动注入

Spring根据某些规则可以给引用类型赋值
使用的规则最常用的就是byName byType

byName

定义

  • java类中引用类型的属性名和spring容器中(配置文件)bean的id名称一样,且数据类型是一致的,这样的容器中的bean,spring能够赋值给引用类型

方式

  • 在bean中加入autowire = "byName"

代码说明

<bean id="student" class="com.hl.spring.Student" autowire="byName">
    <property name="id"        value="1"></property>
    <property name="name"      value="张三"></property>
    <property name="sex"       value=""></property>
    <property name="password"  value="123456"></property>
</bean>
<bean id="school" class="com.hl.spring.School">
    <property name="name" value="XXX大学"></property>
</bean>
byType

定义

  • 按照类型注入,java类中引用类型的数据类型和spring容器中(配置文件)的class属性是同源关系的,这样的bean能够赋值给引用类型

方式

  • 在bean中加入autowire = "byType"

同源

  • java类中引用类型的数据类型和bean的class的值是一样的
  • java类中引用类型的数据类型和bean的class的值是父子关系
  • java类中应用类型的数据类型和bean的class的值接口和实现类关系

注意事项

  • 在xml配置文件中声明bean只能有一个符合条件的
  • 多余一个是错误的

代码说明

<bean id="student" class="com.hl.spring.Student" autowire="byType">
    <property name="id"       value="1"></property>
    <property name="name"     value="张三"></property>
    <property name="sex"      value=""></property>
    <property name="password" value="123456"></property>
</bean>
<bean id="school" class="com.hl.spring.School">
    <property name="name" value="兰州理工大学"></property>
</bean>

04 简化书写

    <bean id="user" class="com.spring.model.User" p:name="佩奇" p:address-ref="address"></bean>
    <bean id="address" class="com.spring.model.Address" p:address="甘肃兰州"></bean>

05 使用多配置文件

当项目规模比较大的时候,使用多个配置文件

5.1 优势

  • 每个文件的大小比一个文件小很多
  • 效率高
  • 避免多人竞争带来的冲突
  • 如果说你的项目有多个模块,一个模块设置一个配置文件

5.2 多文件的分配方式

  • 按功能模块:一个模块一个配置文件
  • 按照类的功能:数据库相关的配置一个文件配置文件,做事务的功能一个配置文件,做service功能的一个配置文件等

语法

  • resource是指其他配置文件的路径
  • classpath表示类路径(class文件所在的目录),告诉Spring去哪里加载
  • 在包含关系的配置文件中,可以使用通配符(*)表示任意字符—注意:这些文件都必须放在同一个目录中
<import resource="classpath:配置文件名称"></import>

构造注入

spring调用有参数的构造函数

public Student(int id, String name, String sex, School school, String password) {
    this.id = id;       
    this.school = school;
}

01 通过index属性

  • 构造方法中的形参,从左向右依次进行排序,从0开始
  • 这里的index是可以省略的
<bean id="student" class="com.hl.spring.Student">
    
    <constructor-arg index="0" value="1"></constructor-arg>
    
    <constructor-arg index="1" ref="school"></constructor-arg>
</bean>

<bean id="school" class="com.hl.spring.School">

    <property name="name" value="兰州理工大学"></property>

</bean>

02 通过name属性

  • name值构造方法中的形参值
  • value是赋值
<bean id="student" class="com.hl.spring.Student">
    
    <constructor-arg name="id"  value="1"></constructor-arg>
    
    <constructor-arg name="school"  ref="school"></constructor-arg>
    
</bean>

<bean id="school" class="com.hl.spring.School">

    <property name="name" value="兰州理工大学"></property>

</bean>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佩奇inging

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值