前言
Spring框架通过POJO最小侵入性编程、DI、AOP、模板代码手段来简化了Java开发,简化了企业应用的开发。POJO和模板代码相对来说好理解,本篇重点解读下DI和AOP。
一DI
DI(依赖注入)定义
对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行的创建或管理它们的依赖关系。
背景和问题
我们行来假设没有Spring来管理注入依赖关系,我们是怎么来实现依赖关系管理的,直接在对象内部通过new进行创建对象,每个对象负责管理与自己相互协作的的对象(即它所依赖的对象)的引用,是程序主动去创建依赖对象。下面的一段代码是在没有用Spring来实现DI的情况下,我们是怎么做的,这样做的问题在哪?
1.高度的耦合,RecognitionServiceImpl和ContractRepository两者耦合在一起。
2.难以测试,如果我们想测试RecognitionService,在不改代码下很难来测试。
解决方案
通过DI,对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象的时候进行设定。对象无需自行的创建或管理它们的依赖关系。DI带来的最大的收益是——松耦合。其次是面向接口依赖的可替换(常用的是测试的时候使用mock实现)
在Spring框架中怎么来实现DI呢?
在Spring中创建应用组件之间的协作方式通常称为装配(wiring)。它提供了三种装配实现方式,分别是XML装配、JavaConfig装配、自动装配。
Spring的装配方式
XML装配(在XML中显示配置)
JavaConfig装配(基于Java的配置)
自动化装配
Spring从两个角度实现自动化装配
组件扫描(