Spring最根本的使命就是为了简化java开发
。为了下降java开发的复杂性,Spring采起了如下的4中策略:java
基于POJO的轻量性和最小侵入性编程编程
经过依赖注入和面向接口实现松耦合安全
基于切面和惯例进行声明式编程框架
经过切面和模板减小样板式代码测试
POJO类就是一个类,包含了一堆属性,还有get、set方法。Spring想要的就是这样简单。你为了使用Spring,不须要修改原有的POJO类。不须要像EJB那样,继承一些必需要继承和实现的方法。其实,这就是框架对你代码的侵入
。形成的结果就是,你的代码与框架牢牢地耦合在一块儿。那究竟是谁服务谁呢?(框架服务你仍是你服务框架)this
Spring竭力避免因自身的API而弄乱你的代码。Spring不会强迫你实现Spring规范的借口或继承Spring规范的类。最坏的状况是,你的代码中加有Spring的注解。日志
依赖注入就是为了解耦。耦合具备两面性:一方面,紧密耦合的代码难以测试,难以复用,难以理解。另外一方面耦合又是必须的,彻底的耦合那就根本成不了一个系统。
对于依赖注入是怎么解耦的,能够这样比喻。之前你的代码里须要一把斧子,那你就new出一把斧子(注意:这里已经发生耦合)。如今有了依赖注入,你须要斧子的时候,Spring就会提供给你,至关于有一个斧子工厂同样。code
AOP容许你把遍及应用各处的功能分离出来造成可重用的组件。这些功能包括日志、安全检查、事务管理等。就拿日志来讲,若是不适用AOP,你可能把日志功能分散的写到各个业务逻辑类中(一改全都须要改),或者把日志功能抽象成一个公共的类。但系统中仍是存在不少同样的方法调用。这个时候若是使用AOP就能够作到最小的侵入性。继承
public class LogUtil{ public void doItBefore(){ System.out.println("do it before"); } public void doItAfter(){ System.out.println("do it after"); } } public class Business{ private LogUtil log; public Business(LogUtil log){ this.log = log; } public void do(){ //日志 log.doItBefore(); //业务逻辑---开始 System.out.println("do it"); //业务逻辑---结束 //日志 log.doItAfter(); } }
业务类Business须要知道日志类LogUtil的存在吗?使用AOP,在Spring的配置文件中进行配置就能够了,Business类不须要作任何的改变。接口
最多见的模板代码就是jdbc的那些代码,开头和结尾基本上都相同,但与业务逻辑绝不相关,还不能不写。使用模板就是能够消除这些样式代码,使精力集中在业务逻辑的处理上。