Spring 4 官方文档学习(六)核心技术之Spring AOP

1、介绍

Aspect-Oriented Programming (AOP),是对OOP的补充。OOP的关键是class,AOP的关键是aspect。

Spring 2.0 引入了更简单但更强大的自定义aspect的方式,可以使用 a schema-based approach 也可以使用 the @AspectJ annotation style 。注意,虽然是使用了AspectJ pointcut语言,但底层仍然是Spring来编织(weaving)。

Spring框架使用AOP来完成以下功能:

  • 提供声明式服务。其中最重要的是声明式事务管理。
  • 允许用户自定义aspect,进行AOP编程。

1.1、AOP 概念

先来定义一些关键概念和术语。这些说法不是Spring独有的,而且,不幸的是,AOP术语不是那么直观。

Aspect:从多个类中切过去的一个概念。事务管理是个好例子。在Spring AOP中,aspect要么使用常规类实现--(the schema-based approach),要么使用@Aspect注解实现--(the @AspectJ style)。

Join point:一个program执行过程的一个点,例如一个方法的执行或者一个异常的处理。注意,在Spring AOP中,一个join point 总是描述一个方法的执行。

Advice:aspect在一个特定的join point执行的操作。advice有不同类型:around、before、after。许多AOP框架,包括Spring,利用advice做成拦截器(interceptor) ,围绕join point维护了一组拦截器。

Pointcut:匹配join point的描述。advice关联了一个pointcut expression,会在任何匹配pointcut expression的join point执行。--例如执行一个具有特定名字的方法!注意:匹配pointcut expression的join point,这个概念是AOP的核心。默认,Spring使用AspectJ pointcut expression语言。

Introduction:为一个类型声明额外的方法或字段。Spring AOP允许你给 任意advised object 引入新的接口(及其实现)。例如,你可以使用introduction来让一个bean实现 IsModified 接口来简化缓存(~~ 就是加一个标志位)。

Target object:object being advised by one or more aspects. 也被叫做 advised object。因为Spring AOP是使用runtime proxies实现的,该object也是一个 proxied object。

AOP proxy:AOP框架创建的一个object,用于实现aspect功能(advise method execution等)。在Spring框架中,AOP proxy是JDK dynamic proxy 或者 CGLIB proxy。

Weaving:将aspects与其他类型或对象链接起来,以创建一个advised object。可以在编译时(例如,使用AspectJ编译器)、加载时、或者运行时完成。Spring AOP是在运行时 --和其他纯Java的AOP框架一样。

时间: 2024-08-26 20:29:53

Spring 4 官方文档学习(六)核心技术之Spring AOP的相关文章

Spring 4 官方文档学习(十二)View技术

1.介绍 Spring 有很多优越的地方,其中一个就是将view技术与MVC框架的其他部分相隔离.例如,在JSP存在的情况下使用Groovy Markup Templates 还是使用Thymeleaf,仅仅是一个配置问题. 本章覆盖了主要的view技术,嗯嗯,可以与Spring结合的那些,并简明的说明了如何增加新的view技术. 本章假定你已经熟悉了Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图 -- 它覆盖了views如何耦合到MVC框架

Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图

接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolvers,可以让你在浏览器中render model,而不必绑定到某种特定的view技术上.开箱即用,例如,Spring可以让你使用JSPs.Velocity目标和XSLT views.See Chapter 23, View technologies for a discussion of how

Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

在前面的文档中讲解了Spring MVC的特殊beans,以及DispatcherServlet使用的默认实现.在本部分,你会学习两种额外的方式来配置Spring MVC.分别是:MVC Java config 和  MVC XML namespace. 原文: Section 22.2.1, "Special Bean Types In the WebApplicationContext" and Section 22.2.2, "Default DispatcherSer

Spring 4 官方文档学习(十三)集成其他web框架

重点是通用配置,非常建议看一下!有助于理解Spring的ApplicationContext与Servlet Container的关系! 1.介绍 Spring Web Flow SWF目标是成为web应用页面flow管理的最佳解决方案. SWF集成了现有的框架,如Spring MVC 和 JSF,在Servlet和Portlet环境中.如果你有一个(或多个)业务处理,且 受益于会话模型而非纯请求模型,那SWF可能就是解决方案. SWF允许捕获逻辑页面flows,并将其作为自包容的模块 -- 可

Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的人,但事实并非如此,例如我.好在闷着头看了一遍,又查资料又敲代码,总算明白了. 其实说穿了一文不值,我们用一个例子来解释: 假定,现有一个app,功能是接收你输入的生日,然后显示你的年龄.看起来app只要用当前日期减去你输入的日期就是年龄,应该很简单对吧?可惜事实不是这样的. 这里面有三个问题: 问题一:我们输入的永远是字符串,字符串需要转成日期格式才能被我们的ap

Spring 4 官方文档学习(十一)Web MVC 框架之HTTP caching support

一个良好的HTTP缓存策略可以显著地增进web应用的性能和其客户端的体验.主要使用"Cache-Control" HTTP response header来完成,配合conditional headers例如"Last-Modified"和"ETag". "Cache-Control" HTTP response header 会建议私有缓存(如浏览器)和公开缓存(如代理)如何缓存HTTP response以供将来复用. &q

Spring 4 官方文档学习(十一)Web MVC 框架之编码式Servlet容器初始化

在Servlet 3.0+ 环境中,你可以编码式配置Servlet容器,用来代替或者结合 web.xml文件.下面是注册DispatcherServlet : import org.springframework.web.WebApplicationInitializer; public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(

Spring 4 官方文档学习 Spring与Java EE技术的集成

本部分覆盖了一下内容: Chapter 28, Remoting and web services using Spring -- 使用Spring进行远程和web服务 Chapter 29, Enterprise JavaBeans (EJB) integration -- EJB集成 Chapter 30, JMS (Java Message Service) -- JMS (Java 消息服务) Chapter 31, JMX Chapter 32, JCA CCI Chapter 33,

Spring 4 官方文档学习(十一)Web MVC 框架之约定优于配置

当返回一个ModelAndView时,可以使用其addObject(Object obj)方法,此时的约定是: An x.y.User instance added will have the name user generated. An x.y.Registration instance added will have the name registration generated. An x.y.Foo instance added will have the name foo gener

Spring JMS 官方文档学习

最后部分的XML懒得写了,因为个人更倾向于JavaConfig形式. 为知笔记版本见这里,带格式~ 做了一个小demo,放到码云上了,有兴趣的点我. 说明:需要先了解下JMS的基础知识. 1.介绍 Spring 提供了一个JMS集成框架,简化了JMS API的使用,类似于Spring提供的JDBC API集成. JMS可以粗略地划分成两大功能区域,就是消息的生产(production)和消费(consumption).JmsTemplate 用于消息的生产和同步的消息接收.对于异步消息接收,类似