• 暂时停更一段时间!
  • 近期网站将陆续进行前端页面改造!
  • 招募网站编辑,联系站长!

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

 <!--引入 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)

邀请您免费 注册账号 登录 即可参与讨论!