作者:May蕊心 | 来源:互联网 | 2023-09-16 20:59
Spring是如何简化java开发的Spring最根本的使命就是为了简化java开发。为了降低java开发的复杂性,Spring采取了以下的4中策略:基于POJO的轻量性和最小侵入
Spring是如何简化java开发的
Spring最根本的使命就是为了简化java开发
。为了降低java开发的复杂性,Spring采取了以下的4中策略:
基于POJO的轻量性和最小侵入性编程
通过依赖注入和面向接口实现松耦合
基于切面和惯例进行声明式编程
通过切面和模板减少样板式代码
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的那些代码,开头和结尾基本上都相同,但与业务逻辑毫不相关,还不能不写。使用模板就是可以消除这些样式代码,使精力集中在业务逻辑的处理上。