• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

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

编程语言 Geekerstar 1年前 (2018-05-30) 847次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

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引入基本开发包和上述开发包。

 <!--引入Spring的基本开发包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.9</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
  </dependencies>

新建一个配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--开启AspectJ的注解开发,自动代理=====================-->
    <aop:aspectj-autoproxy/>

</beans>

@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*(…))


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:基于AspectJ的AOP开发之注解开发方式(一)
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00