Spring到底是个什么东西?

虽然看了一阵子书,可以依然感觉Spring非常抽象。

Spring的介绍:

引出

依赖注入。 方式有: 构造器 注入。(+面向接口)实现松耦合。

创建应用组件(对象)之间协作的行为 称为装配。 即 注入 叫做装配。

常见的是通过XML 配置文件。

AOP

struts2的拦截器是用来过滤页面请求,页面请求到达action前会被过滤器拦截,
而AOP实际是GOF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,主要是用来解决OOP和过程方法不能够很好解决的横切(crosscut)问题。

http://blog.csdn.net/shendl/article/details/526362

横切关注点的两种实现方法
软件系统,可看作由一组关注点组成。其中,直接的业务关注点,是直切关注点。而   直切关注点 提供服务的,就是横切关注点。
有两种方法可以提供横切关注点,一种是传统的OOP方法,提供一个与直切关注点的实现一样的类来提供服务。另一种是最新的AOP方法,提供一个Aspect方面(Spring AOP中叫advisor顾问)来提供服务。
OOP方式是:业务类使用对象引用,使用“委派”的方式,调用横切类的方法(服务)。
这是“主叫”式的服务。业务类用显示代码来呼叫服务。这在业务类中增加了与“直切关注点”概念无关的代码,破坏了封装性,增加了业务类和服务之间的耦合
AOP方式是:提供一个Aspect方面,这个方面的概念类似于“类”,它封装了“横切关注点”的实现代码。并且还提供了“切入点”。切入点是“连接点”的集合。切入点就是定义了Aspect方面为哪些类的哪些方法提供服务。(其实,就是把需要服务的对象,集成到了服务端,而不是业务端的主叫的方式。)
AOP的实现方式有很多种。最早的方式是编译时织入。AspectJ就是使用这种方式。AspectJ的特殊编译器将业务类和Aspect方面的代码组装在一起,从而实现服务的无缝接入。这种方式,源代码中的业务方法和Aspect方面无关。
另一种很典型、很精巧的实现方式是使用动态代理模拟实现AOP。这是现在最流行的方式。JBoss AOP框架和Spring AOP框架都使用这种方式。
这里我介绍一下Spring AOP框架提供横切关注点服务的方式。编写一个方面,这个方面也是一个一般的pojo类,但是它需要提供一个接口。
然后,使用Advisor顾问(就是方面,是方面+切入点)进行配置,配置接口和切入点模式。在程序运行到连接点方法时,构建一个动态代理类,返回一个谧名的java类,而不是直接使用业务类。这个谧名类组装了业务类和Advise建议(就是方面,SpringAOP的术语)。
由此可见,AOP实现横切关注点的方式要比OOP方式好得多。
而在AOP实现中,我更欣赏Spring AOP 这样运用动态代理模式实现的AOP。这种方式不需要任何辅助工具即可开发AOP。
但是,对于开发AOP也要注意一点:  Spring AOP的advice代码只能够在连接点方法之前、之后调用,或者在异常被抛出之后调用。
这样,就要求我们的目标方法(就是连接点,Advice要捆在它上面)必须够小,要把一个大方法分割成多个小方法。这就需要“重构”技术来帮忙。当然,这不是什么缺点,反而是一个让你养成好习惯的机会。“面向方法重构!”
AOP这种技术的提出是一个了不起的成就。这个技术的始作俑者AspectJ本身的实现技术十分笨拙。
AOP思想实际上是一个软件设计思想的发展,“横切关注点”的发现,使施乐的科学家们创造了AOP这样一种“面向方面(横切关注点)编程”的思想。也使他们生造出了笨拙的怪胎AspectJ。而另一些也在苦苦思索OOP面临问题的一线程序高手,立刻从AOP思想中获得久久寻找中的解决之道。
他们从设计模式中翻出了“动态代理模式”和“装修者模式”,用她们优雅的实现了JBossAOP,SpringAOP这样的pojo型的AOP解决方案!

Spring到底是个什么东西?

时间: 2024-11-05 21:36:02

Spring到底是个什么东西?的相关文章

Spark RDD到底是个什么东西

前言 用Spark有一段时间了,但是感觉还是停留在表面,对于Spark的RDD的理解还是停留在概念上,即只知道它是个弹性分布式数据集,其他的一概不知 有点略显惭愧.下面记录下我对RDD的新的理解. 官方介绍  弹性分布式数据集. RDD是只读的.分区记录的集合.RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建. 问题 只要你敢问度娘RDD是什么,包你看到一大片一模一样的答案,都是说这样的概念性的东西,没有任何的价值. 我只想知道 RDD为什么是弹性 而不是 不弹性,

嵌入式到底要学哪些东西?

有些人一直在问,嵌入式要学哪些东西?今天我详细告诉你到底要学哪些技术: 刚开始: 1)学习 Linux系统安装. 常用命令.应用程序安装. 2) 学习 Linux 下的 C 编程.这本书必学<UNIX 环境高级编程>.<UNIX 网络编程>,Rechard Stevens 写的,C 高手大都学习过 <C 和指针>.<C 缺陷与陷阱>.<高质量C/C++编程指南>.<C 专家编程>.<The C programming Langu

unity 第一步 了解unity到底是个什么东西

Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows.Mac.Wii.iPhone.Windows pho

js到底可以实现哪些东西?

1. CSS+JS,可以实现很多很炫的效果,例如旋转,放大,变形等:这些的话,其实一般的前端开发在接触到 CSS3很nb的属性后,都能够游刃有余的实现 2. 前端的性能优化,这块其实涉及的东西很多,对于非js之内,就不过多的说了,主要说下与js方面有关的.我们知道js加载到页面中主要分为2步,一是下载,二是解析:如果js同步下载的话,其实会block住其他资源的下载,这个就是为什么把js异步掉的原因,那这又有一个问题,那我把js异步处理后,为什么不能把它放在头部呢?异步的资源不是不阻碍其他资源的

品Spring:SpringBoot和Spring到底有没有本质的不同?

现在的Spring相关开发都是基于SpringBoot的. 最后在打包时可以把所有依赖的jar包都打进去,构成一个独立的可执行的jar包.如下图13: 使用java -jar命令就可以运行这个独立的jar包.如下图14: 这个jar包的执行入口就是一个main函数,典型的格式如下: @SpringBootApplicationpublic class TasteSpringApplication {    public static void main(String[] args) {     

华为虚拟化到底是个什么东西?

之前写过中小企业网络怎样优化建设的文章,现在随着科技的发展云计算已经逐渐成熟,中小企业以后可以不用再建立自己的机房,直接在网络上去租用各种服务就行(Iaas.Paas.Saas).如下图: 三种服务模式对应关系,如下图: 三种服务商业模式关系,如下图: 在前段时间我在项目实施中帮助客户建立过整套的VMware虚拟化,其中包括服务器虚拟化.桌面虚拟化.备份容灾系统等,在此过程中确实感觉到VMware系统的强大功能和方便实用.其实除了VMware之外,还有Citrix.Microsoft.Linux

AJAX学习-到底是个什么东西

一.基础概念 1.全称:Asynchronous.JavaScript.And.XML(异步的 JavaScript 和 XML). 2.定义: Ajax不是一个技术,它实际上是几种技术,每种技术都有其独特这处,合在一起就成了一个功能强大的新技术. 3.包括: XHTML和CSS 使用文档对象模型(DocumentObjectModel)作动态显示和交互 使用XML和XSLT做数据交互和操作 使用XMLHttpRequest进行异步数据接收 使用JavaScript将它们绑定在一起 4.解释:是

HBase到底是个什么东西

经典解释: http://www.cnblogs.com/skyme/archive/2012/07/25/2608310.html HBase:非关系型数据库:分布式数据库:基于HDFS为最小存储单元,属于文件存储.列存储.(关系型数据库属于 行存储) NoSql:not only sql  非关系型数据 列存储: http://baike.baidu.com/link?url=MYn7JjlF_6vNUAIh30U6zKSq8FhkPCfKlT6tDTHI2L55aMKVTTn1ZCXdvQ

Socket到底是个什么东西

Socket在计算机专业术语上的翻译是"通信节点".计算机网络中阐述,计算机之间的通信通常指的是应用程序之间的通信.而应用程序之间使用Socket来通信,可以简单的认为,Socket封装了TCP/IP协议的具体实现,我们可以通过计算机高级语言在一个抽象层上来实现计算机的通信,而不用考虑具体的细节. 最常见的通信形式是客户端-服务端形式,我们打开浏览器上网,登录QQ聊天,就是属于这种形式.浏览器/QQ是客户端,而网站所在的Web服务器,QQ聊天服务器是服务端. 服务端通过 Socket