Spring之aop(面向切面)

前言

今天为大家分享的是Spring中的aop,面向切面编程中的几大通知!

关于是spring项目的搭建以及相关插件的安装,请看我之前的博客:

1、在eclipse中添加Spring的插件
2、spring的初步介绍与学习

1、aop概念

aop是面向切面编程的一部分!

2、aop中的常见属性

属性名 相关解释
连接点(Joinpoint) 方法的调用、异常的抛出
目标(target) 完成具体的业务逻辑
通知(Advice) 完成切面编程
代理(Proxy) 代理=目标+通知
切入点(PointCut) 多个连接点的集合
适配器(Advisor) 适配器=通知+切入点

3、项目结构

在这里插入图片描述

3.1、如何实现aop

1、目标对象只负责业务逻辑代码
2、通知对象负责AOP代码, 这两个对象都没有AOP的功能,只有代理对象才有!

3.2、通知中需要实现的接口
通知名称 需实现的接口
前置通知 MethodBeforeAdvice
后置通知 AfterReturningAdvice
环绕通知 MethodInterceptor
异常通知 ThrowsAdvice
3.3、代理工厂Bean

代理对象全路径的获取方式
在这里插入图片描述

ProxyFactoryBean用来创建一个代理对象,在一般情况下它需要注入以下三个属性

 proxyInterfaces:代理应该实现的接口列表(List)
 
 interceptorNames:需要应用到目标对象上的通知Bean的   名字。(List)
 
 target:目标对象 (Object)
前置通知

概念:在连接点之前执行的通知 !

前置通知代码展示

package com.wangqiuping.advice;

import java.lang.reflect.Method;
import java.util.Arrays;
import org.springframework.aop.MethodBeforeAdvice;

/**
 * 买书、评论前
 * @author wangqiuping
 *  2020年8月11日  下午3:10:58
 */
public class MyMethodBeforeAdvice implements MethodBeforeAdvice {
   

	@Override
	public void before(Method method, Object[] args, Object target) throws Throwable {
   
		String clzName=target.getClass().getName();
		String methodName=method.getName();
		String params=Arrays.toString(args);
		System.out.println("【买书、评论前加系统日志】"+clzName+"."+methodName+"("+params+")");

	}
}

其中method表示方法名,target表示目标对象,params表示目标对象方法所执行的参数!

后置通知

概念:在连接点正常执行后的通知

案例:在线购书系统中,要求不修改BookBizImpl代码的情况下增加如下功能:
对买书的用户进行返利:每买本书返利3元。(后置通知)
即:每调用一次buy方法打印:“[销售返利][时间]返利3元。”

后置通知代码展示

package com.wangqiuping.advice;

import java.lang.reflect.Method;
import java.util.Arrays;
import org.springframework.aop.AfterReturningAdvice;

public class MyAfterReturningAdvice implements AfterReturningAdvice{
   

	@Override
	public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
   
		String clzName=target.getClass().getName();
		String methodName=method.getName();
		String params=Arrays.toString(args);
		System.out.println("【买书返利的后置通知】"+clzName+"."+methodName+"("+params+")"+"\t 目标对象方法调用后的返回值"+returnValue);
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值