依赖注入

Posted 掬一束月光

tags:

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

说到依赖注入(Dependency Injection),肯定离不开控制反转(Inversion of Control).依赖注入是实现控制翻转最常见的方式之一(因为spring的流行).

这里根据我自己学习依赖注入(DI)的资料整理,以及一些自己的看法

1.依赖注入初识

  无论是因为什么,从哪里接触的依赖注入.首先就是学习三连了:依赖注入是什么?为什么要用依赖注入?怎么用依赖注入?

  1.1是什么?

    依赖注入,就是一个类需要使用到另外一个类的实例的时候,这个实例是通过第三方注入的方式被提供的.

    举例:当你需要喝水时,水的实例xx矿泉水,是买来的,而不是自己生产的;

  1.2为什么?

    依赖注入的目的是实现控制反转,而控制反转的目的在于解耦.

    举例:当你喝水的时候,你只要"需要",即暴露对外接口,水的实例就会通过某个过程,提供给你,你不需要关心是哪种水.(还记得java的封装特性吗?)

    那么依赖注入的直接优势就是解耦以后的高可维护性.

    举例:只暴露需要水的接口,至于选择哪种水(啤酒,饮料,矿泉水?),则有另外的方法实现(你在商店选择哪种水),即决定注入你的是类的哪个实例.这样的话需要水,和需要那种水,就降低了耦合,

    补充:工厂模式是依赖注入的实现手段,参考spring的bean容器概念.

  1.3怎么用

    依赖注入有三种注入方式

    1.3.1构造函数注入(Contructor Injection)

      

public class People{
    private Dog dog;
    public People(Dog dog){
        this.dog = dog;
    }  
}

    1.3.2setter注入

public class People{
    private Dog dog;
    public void setDog(Dog dog){
        this.dog = dog
    }
}

    1.3.3接口注入

public interface Animal{
    public void setAnimal(Dog dog);  
}

public class People implements Animal{
    @Override
    public void setAnimal(Dog dog){
        this.dog = dog;
    }
}

初识到这里了先

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

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Android Dagger片段可以访问AppModule和ActivityModule依赖关系,但不能访问FragmentModule依赖关系

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

Eclipse OSGi 包需要另一个包的片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段