摘要:ioc,控制反转,把创建和查找依赖对象的控制权交给了容器,是spring框架的核心,只是一种项目的设计思想,并没有增加什么新的技术。ioc的实现方式就是DI。DI,依赖注入,是指由容器动态地将依赖对象注入到组件中,是ioc的实现方式。而DI的实现机制是反射。
一:IOC控制反转
1.整体认识什么是ioc控制反转
IOC是Inversion of Control的缩写,翻译过来就是“控制反转”或“控制倒置”。指把创建和查找依赖对象的控制权交给了容器,由 Spring IOC 容器来负责对象的生命周期和对象之间的关系。
2.ioc控制了什么
“掌权”的一方是ioc容器,被控制的一方是依赖对象。
ioc容器分为两种:Spring BeanFactory容器,Spring ApplicationContext容器。其实ioc容器也是Java类,只是名字比较高大上,做的事情也和一般的类不一样罢了。
3.什么东西被反转了
控制(外部资源)的权力被反转了。原先这些外部资源(包括对象、资源、常量数据)的获取由对象主动获取,现在在ioc的机制上,这些外部资源(包括对象、资源、常量数据)的获取由对象被动获取,且ioc容器来对这些资源进行注入(即依赖注入)
二:DI依赖注入
1.什么是DI依赖注入
DI(Dependency Injection)依赖注入:组件之间的依赖关系由容器在运行期决定,即由容器动态地将某个依赖关系添加到某个组件中。
2.谁依赖谁,注入了什么
应用程序依赖ioc容器,注入的是外部资源如对象,资源和常量数据。
题外话,其实依赖注入就是对控制反转的同一概念的不同角度的另一种解释,由于控制反转可能有点晦涩难懂,由2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”。
三:如何实现DI,即注入的三种方式
注入分为三种方式:
构造方法注入
Setter方法注入(属性)
注解方法注入(接口)
2.setter方法注入
如果通过setter方法注入,spring会通过默认的无参构造方法来实例化对象,所以一个类中写了有参的构造方法,一定要记得加上无参的构造方法,否则spring无法实例化对象,会报错。
3.注解方法注入
3.1主要有四种方法可以注入:
@Compotment:可以用于注册所有bean
@Respository:主要用于注册dao层的bean
@Controller:主要用于注册控制层的bean
@Service:主要用于注册服务层的bean
3.2有两种描述依赖关系
@Source
@Autowired
本文也参照这下面这位大佬的博客
http://jinnianshilongnian.iteye.com/blog/1413846