阅读 117

Spring——依赖注入

Spring——依赖注入

依赖注入

内容:依赖注入(DI)是一个过程,通过该过程,对象只能通过构造函数参数,或创建对象实例后在对象实例上设置的属性来定义其依赖关系。


实例:当Class A中用到了 Class B,这时需要在A中new 一个B的对象b。当使用依赖注入时,只需要在A中定义一个私有的B的对象,然后通过IOC容器new 一个B的对象b,再把b注入到A中来使用。


好处:


降低代码的耦合性

增强了模块的重用性以及灵活性

1. 基于构造器的依赖注入

实体类


public class User {

    private String name;


    public User() {

        System.out.println("执行了User类的无参构造方法~");

    }


    public User(String name){

        this.name = name;

        System.out.println("执行了User类的有参构造方法");

    }


    //必须要设置set方法,因为注入时 需要通过set方法注入

    public void setName(String name) {

        this.name = name;

    }


    @Override

    public String toString() {

        return "User{" +

                "name='" + name + '\'' +

                '}';

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

通过下标方式注入(通过index来选择,给有参构造的第几个参数注入)

<bean id="user" class="com.test.pojo.User">

        <constructor-arg index="0" value="gyp"/>

    </bean>

1

2

3

通过名字注入

    <bean id="user" class="com.test.pojo.User">

        <constructor-arg name="name" value="gyp"/>

    </bean>

1

2

3

通过类型注入(不建议使用!因为当类里面有两个相同类型的属性时,无法给属性注入)

<bean id="user" class="com.test.pojo.User">

        <constructor-arg type="java.lang.String" value="gyp"/>

    </bean>

1

2

3

2. 基于setter的依赖注入

实体类


public class Student {

    private String name;

    private Address address;

    private String[] courses;

    private List<String> hobbys;

    private Map<String,String> games;

    private Set<String> associations;

    private Properties info;


    public void setInfo(Properties info) {

        this.info = info;

    }


    public void setName(String name) {

        this.name = name;

    }


    public void setAddress(Address address) {

        this.address = address;

    }


    public void setCourses(String[] courses) {

        this.courses = courses;

    }


    public void setHobbys(List<String> hobbys) {

        this.hobbys = hobbys;

    }


    public void setGames(Map<String, String> games) {

        this.games = games;

    }


    public void setAssociations(Set<String> associations) {

        this.associations = associations;

    }


    @Override

    public String toString() {

        return "Student{" +

                "name='" + name + '\'' +

                "\n address=" + address +

                "\n courses=" + Arrays.toString(courses) +

                "\n hobbys=" + hobbys +

                "\n games=" + games +

                "\n associations=" + associations +

                "\n info=" + info +

                '}';

    }

}


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

Address类 bean注入测试时,使用的bean


public class Address {

    private Address address;


    public void setAddress(Address address) {

        this.address = address;

    }

}

1

2

3

4

5

6

7

}


普通值

<property name="name" value="gyp"/>

1

Bean

<property name="address" ref="address"/>

1

数组

<property name="courses">

    <array>

        <value>C语言</value>

        <value>C++</value>

        <value>Java</value>

    </array>

</property>

1

2

3

4

5

6

7

list

<property name="hobbys">

    <list>

        <value>打游戏</value>

        <value>打篮球</value>

        <value>听歌</value>

    </list>

</property>

1

2

3

4

5

6

7

map

<property name="games">

    <map>

        <entry key="LOL" value="英雄联盟"/>

        <entry key="CS" value="反恐精英"/>

        <entry key="CF" value="穿越火线"/>

    </map>

</property>

1

2

3

4

5

6

7

set

<property name="associations">

    <set>

        <value>计算机协会</value>

        <value>魔术协会</value>

        <value>英语协会</value>

    </set>

</property>

1

2

3

4

5

6

7

properties

<property name="info">

    <props>

        <prop key="身份证">152323</prop>

        <prop key="银行卡">232323</prop>

        <prop key="手机号">156563</prop>

    </props>

</property>

————————————————

版权声明:本文为CSDN博主「XIaoyummm」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/XIaoyummm/article/details/114750454


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐