Spring与AOP之AspectJ对DAO的实现

本文介绍了AspectJ在Spring中实现AOP的详细步骤,包括@Before前置通知、@AfterReturning后置通知、@Around环绕通知、@AfterThrowing异常通知和@After最终通知的使用。同时,探讨了AspectJ的切入点表达式和@Pointcut注解的定义,展示了如何利用AspectJ简化DAO层的增强操作。
摘要由CSDN通过智能技术生成

对于 AOP 这种编程思想,很多框架都进行了实现。 Spring 就是其中之一, 可以完成面向切面编程。 然而, AspectJ 也实现了 AOP 的功能,且其实现方式更为简捷,使用更为方便,而且还支持注解式开发(在 Spring 中使用 AOP 开发时,一般使用 AspectJ 的实现方式)。

AspectJ 简介

AspectJ 是一个面向切面的框架,它扩展了 Java 语言。 AspectJ 定义了 AOP 语法,它有一个专门的编译器用来生成遵守 Java 字节编码规范的 Class 文件。——百度百科《AspectJ》

AspectJ 的通知类型

AspectJ 中常用的通知有五种类型:

(1)前置通知
(2)后置通知
(3)环绕通知
(4)异常通知
(5)最终通知

其中最终通知是指,无论程序执行是否正常,该通知都会执行。类似于 try…catch 中的 finally 代码块。

AspectJ 的切入点表达式

AspectJ 除了提供了六种通知外,还定义了专门的表达式用于指定切入点。表达式的原型是:

execution ( [modifiers-pattern]  访问权限类型
		  ret-type-pattern 返回值类型(不可省)
		  [declaring-type-pattern] 全限定性类名
		  name-pattern(param-pattern) 方法名(参数名) (不可省)
		  [throws-pattern] 抛出异常类型
		  )

注意:
切入点表达式要匹配的对象就是目标方法的方法名。所以, execution 表达式中明显就是方法的签名。表达式中加[ ]的部分表示可省略部分,各部分间用空格分开。在其中可以使用以下符号:

符 号 意义
* 0至多个任意字符
1. 用在方法参数中,表示任意多个参数。2. 用在包名后,表示当前及其子类
+ 1. 用在类名后,表示当前类及其子类。2. 用在接口后,表示当前接口及其实现类

举例:

//指定所有包下的 serivce 子包下所有类中的 doSome()方法为切入点
execution(* *..service.*.doSome())  
//指定只有一级包下的 serivce 子包下所有类中的 doSome()方法为切入点
execution(* *.service.*.doSome())  

AspectJ 基于注解的 AOP 实现

AspectJ 提供了以注解方式对于 AOP 的实现。

实现步骤

(1) 定义业务接口与实现类

//主业务接口
public interface ISomeService {
   
	//主业务方法
	void doFirst();
	//主业务方法
	String doSecond();
	//主业务方法
	void doThird();

}

//目标类
public class SomeServiceImpl implements ISomeService {
   

	//目标方法
	@Override
	public void doFirst() {
   
		System
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值