spring中依赖注入

理解依赖注入:参考https://blog.csdn.net/taijianyu/article/details/2338311

一、依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。

二、依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

三、不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。在理解依赖注入之前,看如下这个问题在各种社会形态里如何解决:一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)。

(1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:Java程序里的调用者自己创建被调用者。

(2)进入工业社会,工厂出现。斧子不再由普通人完成,而在工厂里被生产出来,此时需要斧子的人(调用者)找到工厂,购买斧子,无须关心斧子的制造过程。对应Java程序的简单工厂的设计模式。

(3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:需要斧子。斧子就自然出现在他面前。对应Spring的依赖注入。

第一种情况下,Java实例的调用者创建被调用的Java实例,必然要求被调用的Java类出现在调用者的代码里。无法实现二者之间的松耦合。

第二种情况下,调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用。此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也是工厂模式大量使用的原因。但调用者需要自己定位工厂,调用者与特定工厂耦合在一起。

第三种情况下,调用者无须自己定位工厂,程序运行到需要被调用者时,系统自动提供被调用者实例。事实上,调用者和被调用者都处于Spring的管理下,二者之间的依赖关系由Spring提供。

所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。依赖注入通常有两种:

·设值注入。

·构造注入。


构造函数注入:

    
    class="cn.flypig666.service.impl.AccountServiceImpl">
        
        
        
    

    
    class="java.util.Date">

public class AccountServiceImpl implements IAccountService {

    //如果是经常变化的数据,并不适用于注入的方式
    private String name;
    private Integer age;
    private Date birthday;

    public AccountServiceImpl(String name,Integer age,Date birthday){
        this.name = name;
        this.age = age;
        this .birthday = birthday;
    }

    public void saveAccount(){

        System.out.println("service中的saveAccount方法执行....."+name+","+age+","+birthday);
    }
}

set方法注入:

 1 
13     class="cn.flypig666.service.impl.AccountServiceImpl2">
14         
15         
16         
17     

复杂类型的注入/集合类型的注入:
 1 
 8     class="cn.flypig666.service.impl.AccountServiceImpl3">
 9         
10             
11                 AAA
12                 bbb
13                 DDD
14             
15         
16         
17             
18                 AAA
19                 bbb
20                 DDD
21             
22         
23         
24             
25                 AAA
26                 bbb
27                 DDD
28             
29         
30         
31             
32                 
33                 
34                     BBB
35                 
36             
37         
38         
39             
40                 adsfsaf
41                 bbbggg
42             
43         
44 
45     

 

你可能感兴趣的:(spring中依赖注入)