AOP之基于AspectJ注解总结与案例

本文介绍了如何在Spring中使用@AspectJ注解进行AOP编程,包括启用对@AspectJ的支持、声明切面、切入点、通知的五种类型(前置、后置返回、后置异常、后置最终、环绕)以及引入接口的声明。通过具体的代码示例和使用范例,详细阐述了每个概念和用法。
摘要由CSDN通过智能技术生成

 林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明。导入需要的包:aspectjweaver.jar、aopalliance-1.0.jar

本文工程免费下载

一、基本使用方法

 1.1、启用对@AspectJ的支持

       Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置:

	<!-- 启动@AspectJ支持 -->
	<!-- proxy-target-class默认"false",更改为"ture"使用CGLib动态代理 -->  
	<aop:aspectj-autoproxy proxy-target-class="false"/>
这样Spring就能发现@AspectJ风格的切面并且将切面应用到目标对象。

 1.2、 声明切面

       @AspectJ风格的声明切面非常简单,使用@Aspect注解进行声明:

 @Aspect
public class AdivceMethod {
  
然后将该切面在配置文件中声明为Bean后,Spring就能自动识别并进行AOP方面的配置:

<bean id="aspect" class="……AdivceMethod"/>
或者直接使用元注解的方法:

@Component
@Aspect
public class AdivceMethod {
  

 1.3、 声明切入点

       @AspectJ风格的命名切入点使用org.aspectj.lang.annotation包下的@Pointcut+方法(方法必须是返回void类型)实现。

          @Pointcut(value="切入点表达式", argNames = "参数名列表")
          public void pointcutName(……) {} 

        value:指定切入点表达式;

       argNames:指定命名切入点方法参数列表参数名字,可以有多个用“,”分隔,这些参数将传递给通知方法同名的参数,同时比如切入点表达式“args(param)”将匹配参数类型为命名切入点方法同名参数指定的参数类型。

       pointcutName:切入点名字,可以使用该名字进行引用该切入点表达式。

    @Pointcut(value="execution(* cn.javass..*.sayAdvisorBefore(..)) && args(param)", argNames = "param")  
    public void beforePointcut(String param) {}  
定义了一个切入点,名字为“beforePointcut”,该切入点将匹配目标方法的第一个参数类型为通知方法实现中参数名为“param”的参数类型。

 二、声明通知

       @AspectJ风格的声明通知也支持5种通知类型:

2.1、前置通知:使用org.aspectj.lang.annotation 包下的@Before注解声明;

    @Before(value = "切入点表达式或命名切入点", argNames = "参数列表参数名")  
      value:指定切入点表达式或命名切入点;

       argNames:与Schema方式配置中的同义。

接下来示例一下吧:

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值