依赖注入环境(DI)

依赖注入环境(DI)

依赖注入是Spring除IOC以外的另一个重点

依赖注入有三种方式:

  • 构造器注入
  • set注入
  • 拓展注入

构造器注入

IOC创建对象的过程 | dwx-tx的小天地

这是之前的笔记 就是讲的构造器注入

set注入

set注入是依赖注入的重点

依赖和注入是两个过程,需要分开理解

  • 依赖:bean对象的创建依赖于容器
  • 注入:bean对象中的所有属性由容器来注入

为了方便理解注入的过程以及了解所有的类型的注入方法,我们引出下边这个复杂的例子:

{环境搭建}:

  • 搭建一个复杂的实体类,其中的参数包括:

    • 基本数据类型
    • 引用数据类型
    • List[]
    • 数组
    • map
    • set<>
    • Properties
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    package com.dwx.pojo;

    import java.util.*;

    public class Student {
    //创建一个复杂的实体类
    private String name;
    //引用类型
    private Address address;
    //数组
    private String[] books;
    //list
    private List<String> hobbys;
    //map
    private Map<String,String> card;
    //set
    private Set<String> games;
    //可以赋值为null的参数
    private String wife;
    //properties
    private Properties info;

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public Address getAddress() {
    return address;
    }

    public void setAddress(Address address) {
    this.address = address;
    }

    public String[] getBooks() {
    return books;
    }

    public void setBooks(String[] books) {
    this.books = books;
    }

    public List<String> getHobbys() {
    return hobbys;
    }

    public void setHobbys(List<String> hobbys) {
    this.hobbys = hobbys;
    }

    public Map<String, String> getCard() {
    return card;
    }

    public void setCard(Map<String, String> card) {
    this.card = card;
    }

    public Set<String> getGames() {
    return games;
    }

    public void setGames(Set<String> games) {
    this.games = games;
    }

    public String getWife() {
    return wife;
    }

    public void setWife(String wife) {
    this.wife = wife;
    }

    public Properties getInfo() {
    return info;
    }

    public void setInfo(Properties info) {
    this.info = info;
    }

    @Override
    public String toString() {
    return "Student{" +
    "name='" + name + '\'' +
    ", address=" + address +
    ", books=" + Arrays.toString(books) +
    ", hobbys=" + hobbys +
    ", card=" + card +
    ", games=" + games +
    ", wife='" + wife + '\'' +
    ", info=" + info +
    '}';
    }
    }

    Address引用类型:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    package com.dwx.pojo;

    public class Address {
    private String address;

    public String getAddress() {
    return address;
    }

    public void setAddress(String address) {
    this.address = address;
    }

    @Override
    public String toString() {
    return "Address{" +
    "address='" + address + '\'' +
    '}';
    }
    }

  • 到xml中去进行整合配置注入

xml中注入这些复杂类型

基本数据类型和String的注入

直接使用<properties name=" " value=" "/>来给参数进行注入(类似于赋值)

引用类型的注入

对于引用类型,先在bean中2进行注册,在通过ref来注入

1
2
3
4
5
6
7
8
9
<bean id="address" class="com.dwx.pojo.Address">
<!--为我们这个引用类型赋值-->
<property name="address" value="河南省新乡市"/>
</bean>

<!--对我们复杂的实体类进行注入-->
<bean id="student" class="com.dwx.pojo.Student">
<property name="address" ref="address"/>
</bean>

数组的注入

1
2
3
4
5
6
7
8
9
<!--数组的注入-->
<property name="books">
<array>
<value>《百年孤独》</value>
<value>《白鹿原》</value>
<value>《生死疲劳》</value>
<value>《挪威的森林》</value>
</array>
</property>

List的注入

1
2
3
4
5
6
7
8
<!--List的注入-->
<property name="hobbys">
<list>
<value>跑步</value>
<value>听音乐</value>
<value>阅读</value>
</list>
</property>

map的注入

1
2
3
4
5
6
7
8
<!--map的注入-->
<property name="card">
<map>
<entry key="身份证" value="123123123"/>
<entry key="银行卡" value="345345123"/>
<entry key="一卡通" value="dasd445645"/>
</map>
</property>

key:value相当于键值对

set的注入

1
2
3
4
5
6
7
8
<!--set的注入-->
<property name="games">
<set>
<value>英雄联盟</value>
<value>战意</value>
<value>辐射</value>
</set>
</property>

给参数注入空值

1
<property name="wife" value=""/>

或者写成

1
2
3
<property name="">
<value>null</value>
</property>

Properties注入

1
2
3
4
5
6
7
property name="info">
<props>
<prop key="name">dwx</prop>
<prop key="id">2008114063</prop>
<prop key="age">20</prop>
</props>
</property>

相当于键值对,key就是但是value在<prop></prop>之间

输出结果:

1
Student{name='dwx', address=Address{address='河南省新乡市'}, books=[《百年孤独》, 《白鹿原》, 《生死疲劳》, 《挪威的森林》], hobbys=[跑步, 听音乐, 阅读], card={身份证=123123123, 银行卡=345345123, 一卡通=dasd445645}, games=[英雄联盟, 战意, 辐射], wife='null', info={name=dwx, id=2008114063, age=20}}

c命令注入和p命令注入

c命令对应constructor-arg,是对构造器注入的简化

p命令对应property,是对set注入的简化

P命令注入

p命令对应property,是对set注入的简化

P命令在使用前需要在xml文件的头文件中加上一个配置

xmlns:c="http://www.springframework.org/schema/c"

加完配置后的xml文件像这样

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

P命令的使用

1
<bean id="user" class="com.dwx.pojo.User" p:name="dwx" p:age="18"/>

使用时就用P:参数名=""就可以使用了

c命令注入

c命令对应constructor-arg,是对构造器注入的简化

c命令在使用前需要在xml文件的头文件中加上一个配置

xmlns:c="http://www.springframework.org/schema/c"

加完配置后的xml文件像这样

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

C命令的使用:

<bean id="user2" class="com.dwx.pojo.User" c:age="19" c:name="ddd"/>

使用时就用c:参数名=""就可以使用了

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2023 dwx
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信