Spring之AOP

本文详细介绍了Spring的AOP(面向切面编程)概念,包括连接点、目标、通知、代理等关键性概念,并通过代码示例展示了AOP的前置、后置、环绕和异常处理通知的实现方式。通过AOP,可以将交叉业务逻辑分离,提高代码的可维护性和复用性。
摘要由CSDN通过智能技术生成

一、什么是AOP?

AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。就是将交叉业务逻辑封装成切面,利用AOP的功能将切面织入到主业务逻辑中。所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码若不使用AOP,则会出现代码纠缠,即交叉业务逻辑与主业务逻辑混合在一起。这样,会使主业务逻辑变的混杂不清。在代码执行过程中,动态嵌入其他代码,叫做面向切面编程。常见的使用场景:日志、事务、数据库操作等。 
 


二、AOP关键性概念

代理对象=通知+目标

1、连接点:程序之间过程中明确的点,如方法的调用,异常的抛出
2、目标:被通知代理对象(完成具体执行的业务逻辑)
3、通知:某种特定的连接点上所执行的动作
4、代理:将通知应用到目标所创建的对象(代理=目标+通知)
/
/注:只有完整的代理对象才具备AOP特性,而AOP特性代码是写在通知中的(公共代码,例如:日志)
AOP特性:专一
6、切入点:多个连接点的集合,将通知应用到那些连接点
 注:切入点相当于是一个匹配条件,只有满足条的连接点才会通知应用到目标上
7、迭代器:通知+切入点(相当于必须满足切入点条件才会应用通知分部)


三、AOP的实现方式

     通知类型  说明
前置通知(MethodBeforeAdvice) 目标方法执行之前调用
后置通知(AfterReturningAdvice) 目标方法执行完成之后调用
环绕通知(MethodInterceptor) 目标方法执行前后都会调用方法,且能增强结果
异常处理通知(ThrowsAdvice) 目标方法出现异常调用

四、AOP代码实现示例

1、创建接口和实现类

package com.zking.spring02.biz;

public interface IBookBiz {
	// 购书
	public boolean buy(String userName, String bookName, Double price);

	// 发表书评
	public void comment(String userName, String comments);
}
package com.zking.spring02.biz;

import com.zking.spring02.advice.PriceException;

public class BookBizImpl implements IBookBiz {

	public BookBizImpl() {
		super();
	}

	public boolean buy(String userName, String bookName, Double price) {
		// 通过控制台的输出方式模拟购书
		if (null == price || price <= 0) {
			throw new PriceException("book price exception");
		}
		System.out.println(userName + " buy " + bookName + ", spend " + price);
		return true;
	}

	public void comment(String userName, String comments) {
		// 通过控制台的输出方式模拟发表书评
		System.out.println(userName + " say:" + comments);
	}

}

2、前置通知

2.1创建前置通知类BeforeAdvice,包含前置通知方法before

package com.zking.spring02.advice;

import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;
import java.util.Arrays;

/**
 * 前置通知,用于目标方法被调用之前进行日志收集
 */
public cla
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值