Spring 侵入式和非侵入式

1.非侵入式的技术体现 允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须从Spring框架的系统API的某个类来继承或者实现某个接口。

2.如何实现非侵入式的设计目标的

  1)应用反射机制,通过动态调用的方式来提供各方面的功能,建立核心组间BeanFactory

  2)配合使用Spring框架中的BeanWrapper和BeanFactory组件类最终达到对象的实例创建和属性注入

  3)优点:允许所开发出来的应用系统能够在不用的环境中自由移植,不需要修改应用系统中的核心功能实现的代码

   简单说一下我的理解吧。假设大家都想要把用户代码塞到一个框架里。侵入式的做法就是要求用户代码“知道”框架的代码,表现为用户代码需要继承框架提供的类。非侵入式则不需要用户代码引入框架代码的信息,从类的编写者角度来看,察觉不到框架的存在。 例如: 使用struts的时候,我需要继承一些struts的类,这时struts侵入到了我的代码里。 使用spring,编写一些业务类的时候不需要继承spring特定的类,通过配置完成依赖注入后就可以使用,此时,spring就没有侵入到我业务类的代码里。 侵入式让用户代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。但侵入式可以使用户跟框架更好的结合,更容易更充分的利用框架提供的功能。 非侵入式的代码则没有过多的依赖,可以很方便的迁移到其他地方。但是与用户代码互动的方式可能就比较复杂。 这两种方式都有各自的优缺点吧,主要看实际开发时怎么权衡了。

简单来说,非侵入式就是不继承框架提供的类,而是通过配置完成依赖注入后,就可以使用!

时间: 2024-08-29 10:15:11

Spring 侵入式和非侵入式的相关文章

侵入式和非侵入式的区别

非侵入式设计 一个客户端的代码可能包含框架功能和客户端自己的功能. 侵入式设计,就是设计者将框架功能“推”给客户端,而非侵入式设计,则是设计者将客户端的功能“拿”到框架中用. 侵入式设计有时候表现为客户端需要继承框架中的类,而非侵入式设计则表现为客户端实现框架提供的接口. 侵入式设计带来的最大缺陷是,当你决定重构你的代码时,发现之前写过的代码只能扔掉.而非侵入式设计则不然,之前写过的代码仍有价值. struts1的设计是侵入式的: public class loginAction extends

Java基础知识强化之多线程笔记07:同步、异步、阻塞式、非阻塞式 的联系与区别

1. 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.但是一旦调用返回,就必须先得到返回值了. 换句话话说,调用者主动等待这个"调用"的结果. 对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已. 2. 异步: 所谓异步,"调用"在发出之后,这个调用就直接返回了,所以没有返回结果. 换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果.而是在"调用"发出后,"被调用者&q

PHP PDO_MYSQL 链式操作 非链式操作类

<?php /* vim: set expandtab tabstop=4 shiftwidth=4: */ // +----------------------------------------------------------------------+ // | PHP version 5 | // +----------------------------------------------------------------------+ // | Copyright (c) 199

登录式与非登录式&amp;交互式与非交互式shell及其环境初始化过程

交互式shell和非交互式shell(interactive shell and non-interactive shell) 交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.退出.当你退出后,shell也终止了. shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行.在这种模式 下,shell不与你进行交互,而是读取存

Java基础:非阻塞式IO

转载请注明出处:jiq?钦's technical Blog 引言 JDK1.4中引入了NIO,即New IO,目的在于提高IO速度.特别注意JavaNIO不完全是非阻塞式IO(No-Blocking IO),因为其中部分通道(如FileChannel)只能运行在阻塞模式下,而其他的通道可以在阻塞式和非阻塞式之间进行选择. 尽管这样,我们还是习惯将Java NIO看作是非阻塞式IO,而前面介绍的面向流(字节/字符)的IO类库则是非阻塞的,详细来看,两者区别如下: IO NIO 面向流(Strea

Android基于AOP的非侵入式监控之——AspectJ实战

一引言 二什么是AspectJ 1 它只是一个代码编译器 2 它是用来做AOP编程的 3为什么要用AspectJ 三AspectJ原理与运用 1 基本原理 2 使用方式 21 纯注解方式 22 AspectJ语言 23 结合自定义注解使用 四AspectJ实战监听方法执行耗时打印并输出 五一些比较常见的问题 六推荐文章 一.引言 本博文的目的不是详细的介绍AspectJ的细节,而是最近项目用到了AspectJ,因此对其作了一些使用和重要概念上的总结. 相信很多做过Web的同学对AspectJ都不

BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)

开发者博客: BlockCanary — 轻松找出Android App界面卡顿元凶 开源代码:moduth/blockcanary BlockCanary对主线程操作进行了完全透明的监控,并能输出有效的信息,帮助开发分析.定位到问题所在,迅速优化应用.其特点有: 非侵入式,简单的两行就打开监控,不需要到处打点,破坏代码优雅性. 精准,输出的信息可以帮助定位到问题所在(精确到行),不需要像Logcat一样,慢慢去找. 目前包括了核心监控输出文件,以及UI显示卡顿信息功能.仅支持Android端.

MVC的验证(模型注解和非侵入式脚本的结合使用)

@HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客户端,后台服务器的验证,MVC统统都做了包含,即使用户在客户端禁用Javascript,服务器也会将非法操作进行验证,当前前提是针对Model实体标识了注解的情况. 要能够正常进行非空等合法性验证必须做如下步骤(前提条件): 1.必须在实体的每个类型上加上Required特性,但是数字型的属性默认已经加上了. 2.必须在视图上导入如下脚本: <scri

eclipse插件安装:非侵入式方法

非侵入式安装插件方法(links安装方法) 既然有侵入式的安装,言下之意,还有个“非侵入式安装”,也有人成为links安装方法,下面看究竟是如何安装的:). 非侵入式安装也分两种,一种是绝对路径安装方法,一种是相对路径的安装方法.首先看绝对路径的安装的方法. 在上面安装过程中,我们将中文语言包NLpack1-eclipse-SDK-3.2.1-win32.zip插件解压缩到一个地方假设为F:\myplugins目录文件夹的目录结构如下: NLpack1-eclipse-SDK-3.2.1-win