我们都知道spring可以做很多事情,但我们仔细研究就会发现,我们最常用的,也是Spring最核心的特性仅仅是依赖注入(DI Dependency Injection )和面向切面编程(AOP Aspect Oriented Programming)。但归根结底Spring的使命就是简化java开发。
spring使用4中关键的策略来实现其目的:
1.基于pojo的轻量级和最小入侵性编程;
2.通过依赖注入和面向切面编程实现松耦合;
3.基于切面和惯例进行声明式编程;
4.通过切面和模板减少板式代码;
几乎Spring做的任何事情都可以追溯到上面的一条或者多条核心策略,我们可以通过一些案例进一步阐明这些理念。
下面我们就从基于pojo的最小入侵性编程开始说起
当我们接触过java编程一段时间之后就会发现很多框架会强迫应用继承他们的类或实现他们的接口从而让应用和框架进行绑死。一个典型的例子是EJB2的无状态会话bean,例如下面代码片段中所示
package eric.example;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class HelloWorldEJBBean implements SessionBean{
public void ejbActive(){ //我们不需要这些方法
}
public void ejbPassivate(){
}
public void ejbRemove(){
}
public void SetSessionContext(SessionContext ctx){
}
public String sayHello(){ //EJB的核心业务逻辑
return "Hello World" ;
}
public void ejbCreate(){
}
}
那么问题来了---------挖掘机哪家强?(开个玩笑,哈哈)
那么问题来了---------到底谁应该为谁服务?
EJB2并不是特例,其他的一些流行框架也是这样,例如早期版本的Struts、WebWork等等,这些重量级框架都存在这些问题:强迫开发者编写大量冗余代码、应用与框架绑定不易于迁移,通常也很难编写测试代码。(这并不是说这些重量级框架不好)
Spring竭力避免因为自身的API弄乱开发者的代码。Spring不会强迫你实现Spring的一些接口或者集成Spring规范的类,通常我们在使用Spring的时候没有任何痕迹说明你使用了Spring除了注解
下面是代码片段Spring的pojo
package eric.example;
public class HelloWorldBean {
public String sayHello(){ //这就是我们的需要的。
return "Hello World";
}
}
是不是看起来好多了,没有一些乱七八糟的代码。
这个对比就说明了以上Spring简化java开发的核心策略之一:最小的入侵性编程。
ps:本系列文章是类似于读后感+读书笔记之类的东西,有意请参阅Spring In Action