`
lighter
  • 浏览: 500961 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

复习笔记:关于Spring AOP的一些点滴

阅读更多
Advice标签接口是所有处理的根接口.spring还包含如下内建的处理类:
MethodInterceptor
ThrowsAdvice
BeforeAdvice
AfterReturningAdvice

spring主要提供静态和动态切入点:判断静态切入点只考虑类和方法。Spring只需第一次调用方法时判断表态切入点,不需要在每次调用方法

时判断。判断动态切入点则不仅需要类和方法,还需要调用方法的参数,因此,每一次调用方法都必须判断。常用的切入点是与正则表达式切入点。

1、Around处理
实现around处理需要实现MethodInterceptor接口(由AOP聪明提供),源代码如下:
public interface MethodInterceptor  extends Interceptor
{
  Object invoke(MethodInvocation invocation) throws Throwable; 
}

通过MethodInvocation可以执行目标方法,invoke返回调用的结果,即连接点的返回值。

2、Before处理
必须实现MethodBeforeAdvice接口,该接口的源代码如下:
public interface MethodBeforeAdvice extends BeforeAdvice {
        //参数分别是:执行的方法,调用方法的参数量和目标对象
	void before(Method method, Object[] args, Object target) throws Throwable;
}

Before处理可以被用于任何类型的切入点。

3、After Returning处理
必须实现AfterReturnAdvice接口,源代码如下:
public interface AfterReturningAdvice extends Advice {	
	/**
	 * @param returnValue 目标方法的返回值
	 * @param method 目标方法对象
	 * @param args 方法的参数
	 * @param target目标对象
	 */
	void afterReturning(Object returnValue, Method method, Object[] args, Object target)
       throws Throwable;
}


4、throws处理:须实现ThrowsAdvice接口。
   Introduction处理:须实现MethodIntercepto接口;不能作用于任何切入点,只作用于类层次,而不是方法层次。

5、拦截器的定义顺序很重要。拦截器前面的处理先被调用,链后面的处理后被调用。

6、ProxyFactoryBean的bean工厂:
   如果目标类没有实现接口,需要对类生成代理,而不能为接口生代理。为类生成代理,需要使用CGLIB,而不能使用JDK动态代理。可以这么做:
   [1]去掉<property name="proxyInterfaces">声明
   [2]增加<preperty name="proxyTargetClass">子元素,并设其值为true。
另外,说明一下,在实现接口的情况也可强制使用CGLIB代理。

还有一点注意的是:
CGLIB代理是目标对象子类,必须考虑:
   [1]目标类不能声明为final,因为final类不能被继承,无法生成代理
   [2]目标方法也不能声明为final,final方法不能被重写,无法得到处理。

7、TransactionProxyFactoryBean其中的两个属性:preInterceptors,postInterceptors分别用来确定事务拦截器前后的拦截器链。

8、个人观点:提倡用BeanNameAutoProxyCreator,在管理事务的时候;不提倡用DefaultAdvisorAutoProxyCreator。

9、Advisor等于切入点加处理,是aspect的模块化的表示。除了Intorduction处理,Advisor可以被用于任何处理。DefaultPointcutAdvisor是最通用的Advisor类。


















分享到:
评论

相关推荐

    spring-aop-5.0.10.RELEASE-API文档-中文版.zip

    Maven坐标:org.springframework:spring-aop:5.0.10.RELEASE; 标签:spring、aop、springframework、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览...

    Spring源码最难问题:当Spring AOP遇上循环依赖.docx

    Spring源码最难问题:当Spring AOP遇上循环依赖 Spring源码中最难的问题之一是循环依赖问题,当Spring AOP遇上循环依赖时,该如何解决? Spring通过三级缓存机制解决循环依赖的问题。 在Spring中,bean的实例化...

    spring-aop-5.2.0.RELEASE-API文档-中文版.zip

    Maven坐标:org.springframework:spring-aop:5.2.0.RELEASE; 标签:springframework、spring、aop、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...

    第四章:Spring AOP API 设计模式1

    1. **抽象工厂模式(Abstract Factory)**:Spring AOP框架中的`AopProxyFactory`接口代表抽象工厂,如`DefaultAopProxyFactory`是其实现,负责创建代理对象。抽象工厂模式确保了客户端无需关注具体对象的创建细节,...

    spring-aop-5.0.8.RELEASE-API文档-中英对照版.zip

    Maven坐标:org.springframework:spring-aop:5.0.8.RELEASE; 标签:springframework、spring、aop、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...

    学习笔记:尚硅谷Spring6基础篇

    - **一站式服务**:Spring框架不仅可以整合各种企业应用的开源框架和优秀的第三方类库,还提供了丰富的项目支持,几乎可以满足所有企业级应用的需求。 #### 二、Spring模块组成 Spring框架由多个模块组成,每个...

    spring-aop-5.3.15-API文档-中英对照版.zip

    Maven坐标:org.springframework:spring-aop:5.3.15; 标签:spring、aop、springframework、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...

    spring-aop-5.3.12-API文档-中英对照版.zip

    Maven坐标:org.springframework:spring-aop:5.3.12; 标签:springframework、spring、aop、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...

    spring-aop-5.3.10-API文档-中文版.zip

    Maven坐标:org.springframework:spring-aop:5.3.10; 标签:springframework、spring、aop、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

    spring-aop-5.2.15.RELEASE-API文档-中文版.zip

    Maven坐标:org.springframework:spring-aop:5.2.15.RELEASE; 标签:springframework、spring、aop、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。...

    Java利用spring aop进行监测方法执行耗时

    使用 Spring AOP 进行方法耗时监测的好处有以下几点: 1. 代码实现简单,易于维护:使用 Spring AOP 可以将耗时监测的逻辑与业务逻辑进行解耦,避免业务逻辑代码的冗余和代码维护难度的提高。 2. 安全性高:使用 ...

    spring aop 学习笔记

    - **代理(Proxy)**:Spring AOP创建的对象,用于实现切面的逻辑。 - **织入(Weaving)**:将切面应用到目标对象,创建代理的过程。可以发生在运行时或编译时。 2. **工作原理** - **动态代理**:Spring AOP...

    spring-aop-5.3.15-API文档-中文版.zip

    Maven坐标:org.springframework:spring-aop:5.3.15; 标签:spring、aop、springframework、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

    spring-aop-4.2.2.RELEASE-API文档-中文版.zip

    Maven坐标:org.springframework:spring-aop:4.2.2.RELEASE; 标签:springframework、spring、aop、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...

    spring-aop-5.1.3.RELEASE-API文档-中英对照版.zip

    Maven坐标:org.springframework:spring-aop:5.1.3.RELEASE; 标签:springframework、spring、aop、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...

    spring-aop.jar各个版本

    spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...

    spring-aop-5.3.7-API文档-中文版.zip

    Maven坐标:org.springframework:spring-aop:5.3.7; 标签:springframework、spring、aop、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

    spring-aop-4.3.20.RELEASE-API文档-中文版.zip

    赠送jar包:spring-aop-4.3.20.RELEASE.jar; 赠送原API文档:spring-aop-4.3.20.RELEASE-javadoc.jar; 赠送源代码:spring-aop-4.3.20.RELEASE-sources.jar; 包含翻译后的API文档:spring-aop-4.3.20.RELEASE-...

    spring aop jar 包

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个"spring aop jar 包"包含了实现这一功能所需的类和接口,...

    Spring AOP面向方面编程原理:AOP概念

    3. **灵活的通知模型**:Spring AOP提供了多种类型的通知,包括around、before、after returning、after throwing等,使得开发者可以根据实际需求选择最适合的通知类型。 4. **丰富的切入点表达式语言**:Spring ...

Global site tag (gtag.js) - Google Analytics