一. 引言
在阅读spring相关资料,都会提到Spring是非侵入式编程模型,轻量级框架,那么就有必要了解下这些概念。
二. 侵入式与非侵入式
非侵入式:使用一个新的技术不会或者基本不改变原有代码结构,原有代码不作任何修改即可。侵入式代码结构则要与该技术产生依赖。
侵入式框架:引入了框架,对现有的类的结构有影响,需要实现框架某些接口或者基础某些特定的类。侵入式让用户的代码对框架产生了依赖,不利于代码的复用,当去除框架的时候,程序就无法运行。当然侵入式可以使得用户的代码与框架更好的结合,充分利用框架提供的功能。(代码结构和框架产生耦合)例子:Struts1框架, Struts1代码严重依赖于Struts1 API,属于侵入性框架。
非侵入式框架:引入了框架,对现有的类结构没有影响,不需要实现框架某些接口或者特定的类。比如Spring框架,通过配置完成依赖注入就可以使用,当我们想换个框架,只需要修改相应的配置,程序仍然可以运行。(实际上一般Spring所倡导的无侵入性一般来说都是指它的IOC框架,象楼上所说的事务管理,或者诸如AOP等,都是有侵入的,如果设计的好的话,可以把损失降低到更小,但的确不是一点侵入都没有。)
Struts1框架例子,Struts1要求Action必须统一扩展自Action类
public class UserAction extends ActionForm{ private static final long serialVersionUID = 1L; //查询所有用户 public String list() throws Exception { return SUCCESS; } }
Spring框架例子,Spring管理HelloWorldBean例子(使用配置文件管理HelloWorldBean对象,可以看出Spring没有对HelloWorldBean的代码结构有任何影响。Spring使用IOC容器管理对象):
三. 重量级与轻量级
重量级与轻量级最主要的衡量指标是以启动程序需要的资源来决定的。
比如EJB框架,集成了很多服务,启动的时候,需要占用大量的资源,那么他就是重量级框架。
比如Spring框架,核心架包小,启动的资源小,那么他就是轻量级框架,但是Spring可以集成其他服务,如果过多的话,占用了过多的资源那么他也是重量级框架。
参考资料:
CSDN博客:https://blog.csdn.net/xujiangdong1992/article/details/73467922
https://blog.csdn.net/wangkai0681080/article/details/8274544
百度知道:https://zhidao.baidu.com/question/233377584.html?qbl=relate_question_0&word=JAVA%C7%D6%C2%D4%D0%D4API