工作了快一年的时间,感觉没有系统的学习过Spring,在这边开一个博客,记录一下Spring第四版的学习。
1 Spring 如何简化Java 开发的复杂性
- 基于pojo的轻量级和最小侵入性编程
- DI和面向接口实现松耦合
- AOP和惯例进行声明式编程
- 通过切面和模板减少样板式代码
1.1 基于pojo的轻量级和最小侵入性编程
Spring不会强迫你实现Spring规范接口或继承Spring规范的类,没有任何痕迹表明你使用了Spring。
例子: spring在这个bean上面不会有任何不合理的请求
package com.habuma.spring; public class HelloWorldBean {
public String sayHello() {
return "Hello World";
} }
这就是一个简单的普通的Java类,POJO。Spring的非侵入编程意味着这个类在spring和非spring的应用中都可以发挥作用!!!!
1.2 依赖注入
任何一个有实际意义的应用,都会有两个或者更多的类组成。这些类相互之间进行协作来完成特定的业务逻辑。
之前的做法是每个对象负责管理与自己相互协作的对象,即它所依赖的对象的引用,这会导致高度耦合和难以测试的代码
package com.springinaction.knights;
public class DamselRescuingKnight implements Knight {
private RescueDamselQuest quest;
public DamselRescuingKnight() {
this.quest = new RescueDamselQuest(); //quest与救公主强耦合,这个骑士只能救公主
}
public void embarkOnQuest() {
quest.embark();
}
}
上面的例子中,我们的骑士的quest与救公主的quest有着强耦合,这个骑士只能做救公主一件事情。在测试方面,当你要调用embarkOnQuest的时候,你的emark方法也要保证被调用。测试起来很麻烦!!!
通过DI,对象的依赖关系将由系统中负责协调对象的第三方组件在创建对象的时候进行设定。就是由spring的依赖注入模块来做!!!
DI 例子:
package com.springinaction.knights;
public class BraveKnight implements Knight {
private Quest quest;
public BraveKnight(Quest quest) { //构造器注入
this.quest = quest;
}
public void embarkOnQuest() {
quest.embark();
}
}
这里面的braveknight没有自行创建探险任务,而是在构造的时候把探险任务作为参数传入,这就是构造器注入。同时,这个骑士也可以响应各种任务!!!因为传入了一个Quest接口的对象。
要点:brave knight 没有入任何特定的quest发生耦合,任何实现了quest接口的对象都可以传进来,具体是哪一种类型的探险就无关紧要了。这就是DI带来的最大收益,松耦合。如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖就能够在对象本身毫不知情的情况下,用不同的具体实现来替换!!!!
本文介绍了Spring如何通过基于POJO的轻量级和最小侵入性编程简化Java开发的复杂性,重点讲解了依赖注入(DI)的概念,展示了如何通过DI实现对象间的松耦合,提高代码的可测试性和可维护性。
578

被折叠的 条评论
为什么被折叠?



