Spring是如何简化java开发的

Spring最根本的使命就是为了简化java开发。为了降低java开发的复杂性,Spring采取了以下的4中策略:

  1. 基于POJO的轻量性和最小侵入性编程

  2. 通过依赖注入和面向接口实现松耦合

  3. 基于切面和惯例进行声明式编程

  4. 通过切面和模板减少样板式代码

POJO的轻量性和最小侵入性编程体现在哪里?

POJO类就是一个类,包含了一堆属性,还有get、set方法。Spring想要的就是这样简单。你为了使用Spring,不需要修改原有的POJO类。不需要像EJB那样,继承一些必须要继承和实现的方法。其实,这就是框架对你代码的侵入。造成的结果就是,你的代码与框架紧紧地耦合在一起。那到底是谁服务谁呢?(框架服务你还是你服务框架)

Spring竭力避免因自身的API而弄乱你的代码。Spring不会强迫你实现Spring规范的借口或继承Spring规范的类。最坏的情况是,你的代码中加有Spring的注解。

依赖注入

依赖注入就是为了解耦。耦合具有两面性:一方面,紧密耦合的代码难以测试,难以复用,难以理解。另一方面耦合又是必须的,完全的耦合那就根本成不了一个系统。
对于依赖注入是怎么解耦的,可以这样比喻。以前你的代码里需要一把斧子,那你就new出一把斧子(注意:这里已经发生耦合)。现在有了依赖注入,你需要斧子的时候,Spring就会提供给你,相当于有一个斧子工厂一样。

应用切面

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的那些代码,开头和结尾基本上都相同,但与业务逻辑毫不相关,还不能不写。使用模板就是可以消除这些样式代码,使精力集中在业务逻辑的处理上。


852774731
975 声望7 粉丝