一. 引言

  在阅读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

最新文章

  1. An error occurred during the installation of assembly 'Microsoft.VC90.CRT……的问题
  2. android 屏幕分辨率 更改
  3. solr 4.6的安装配置
  4. hdu4750Count The Pairs(最小生成树找瓶颈边)
  5. EntityFramework 启用迁移 Enable-Migrations 报异常 "No context type was found in the assembly"
  6. css-关于absolute和relative的一些笔记
  7. 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
  8. 【第一篇】Android环境搭建
  9. Factstone Benchmark
  10. DB层面上的设计 分库分表 读写分离 集群化 负载均衡
  11. 安装CouchbaseClient的过程中提示 Error 1935.An error occurred during the installation of assembly;Error:-1603 fatal error during installation
  12. HTML5自带的原生定位
  13. 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)
  14. linux命令之more
  15. Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)
  16. IT只忍者龟Photoshop简单人像的头发抠图过程
  17. 初窥Linux 之 数据流重定向
  18. javascript抛物投栏(抛物线实践)
  19. Java 学习笔记 (二) Selenium WebDriver Java 弹出框
  20. Restful风格

热门文章

  1. 支付宝在ios应用上的开发[转]
  2. 用 S5PV210 学习 Linux (三) SD卡下载
  3. php版本低更换php版本-问题以解决
  4. nginx编译问题:make[1]: *** [/usr/local/pcre//Makefile] Error 127
  5. Web的基本工作原理、HTTP协议和URL说明
  6. [示例] Firemonkey 面包屑导航
  7. ECShop全系列版本远程代码执行漏洞复现
  8. 【非原创】Game23
  9. LeetCode——数组篇:659. 分割数组为连续子序列
  10. 在.net core中使用Thrift