依赖注入
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 注入的影响?
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段