基于AspectJ的AOP开发之注解开发方式(一)

AspectJ简介

AspectJ是一个基于Java语言的AOP框架

Spring 2.0以后新增了对AspectJ切点表达式支持

@AspectJ是AspectJ1.5新增功能,通过JDK5注入技术,允许直接在Bean类中定义切面

新版本Spring框架建议使用AspectJ方式来开发AOP

使用AspectJ需要导入Spring AOP和AspectJ相关Jar包

使用AspectJ实现AOP

– 注解方式

– XML方式

在以后Spring的开发过程中,我们都会使用AspectJ的方式,因为它比我们传统的AOP的开发更加灵活方便,这也是我们学习的重点。

环境准备

接下来我们将使用AspectJ的注解方式进行AOP的开发,先创建一个工程,然后引入相关的开发包,这里我们需要引入Spring的基本开发包、AOP的开发包以及AspectJ的相关开发包。

新建一个项目,创建一个包com.jikewenku.aspectJ,通过maven引入基本开发包和上述开发包。

 
    
      org.springframework
      spring-core
      4.2.4.RELEASE
    
    
      org.springframework
      spring-context
      4.2.4.RELEASE
    
    
      org.springframework
      spring-beans
      4.2.4.RELEASE
    
    
      org.springframework
      spring-expression
      4.2.4.RELEASE
    

    
      aopalliance
      aopalliance
      1.0
    
    
      org.springframework
      spring-aop
      4.2.4.RELEASE
    

    
      org.aspectj
      aspectjweaver
      1.8.9
    
    
      org.springframework
      spring-aspects
      4.2.4.RELEASE
    

    
      org.springframework
      spring-test
      4.2.4.RELEASE
    
  

新建一个配置文件applicationContext.xml




    
    


@AspectJ提供不同的通知类型

@Before 前置通知,相当于BeforeAdvice

@AfterReturning 后置通知,相当于AfterReturningAdvice

@Around 环绕通知,相当于MethodInterceptor

@AfterThrowing 异常抛出通知,相当于ThrowAdvice

@After 最终final通知,不管是否异常,该通知都会执行

@DeclareParents 引介通知,相当于IntroductionInterceptor(不要求掌握)

在通知中通过value属性定义切点

通过execution函数,可以定义切点的方法切入

语法:

– execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)

例如:

– 匹配所有类public方法 execution(public * *(…))

– 匹配指定包下所有类方法 execution(* com.jikewenku.dao.*(…)) 不包含子包

– execution(* com.jikewenku.dao…*(…)) …*表示包、子孙包下所有类

– 匹配指定类所有方法 execution(* com.jikewenku.service.UserService.*(…))

– 匹配实现特定接口所有类方法 execution(* com.jikewenku.dao.GenericDAO+.*(…))

– 匹配所有save开头的方法 execution(* save*(…))

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » 基于AspectJ的AOP开发之注解开发方式(一)

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多