Spring-AOP代理增强

系列文章目录



前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一.什么Spring-AOP代理增强?

目标类 + 额外功能 = 代理类
比如:日志处理/事务处理/异常处理/性能分析…Redis 非关系型数据

  1. 通过spring AOP的代理功能,给代码增加额外的通用功能
  2. 业务逻辑就专心的处理实际需求,通用的增强功能独立出来
  3. 代理的专业术语
    额外功能叫 增强
    目标类叫 切入点 或 切面
    将增强 加入到 切入点,叫编织
    AOP是面向切面编程的一种实现

二、AOP步骤:

1. 导包

在这里插入图片描述

书写一个增强类(前置为例)

public class MyBeforeAdvice implements MethodBeforeAdvicel
@override
public void before(Method arg0,Object[] arg1,Object arg2) throws Throwable {
System.out.println("this is MyBeforeAdvice");
}
public class MyBeforeAdvice implements MethodBeforeAdvice{
@Override
public void before(Method arg0,Object[] arg1,Object arg2)throws Throwable {
//获取目标方法名称
String method = argo.getName(;
System.out.println("the method : " +method);
//获取目标方法参数的实参
for(int i=0;i<arg1. length;i++)i
System.out.println("the arg1 : "+arg1[i]);
}
/获取目标类
System.out.println("the arg2 : "+arg2.getClass());
System.out.println("this is MyBeforeAdvice");


2. 配置增强类的bean

代码如下(示例):

<!--增强功能–->
<bean id="myBeforeAdvice" class="com.gxy .aop.MyBeforeAdvice"></bean>

3. 配置AOP的编织功能 写接口的包路径

<!--AOP配置–->
<aop:config>
4
<aop:pointcut expression="execution(*com.gxy. service.*.*(..))" id="myPointCut"/>
3`5'
12
<aop:advisor advice-ref="myBeforeAdvice" pointcut-ref="myPointCut"/>
</aop:config>
package com.gxy.service; 2
import java.io.IOException;
public interface ProductService {
3
//商品展示
5
public List<Product> selectAll()throws IOException;

1: 通配接口或者普通方法
2: 包名
3: 类名
4: 方法名
5: 参数


AOP的4种增强方式

1. 前置增强,在核心功能之前执行的额外功能
public class MyBeforeAdvice implements MethodBeforeAdvice{
@Override
public void before(Method arg0,Object[] arg1,Object arg2) throws Throwable {
/获取目标方法名称
String method = argo.getName();
System.out.println("the method: "+method);
/获取目标方法参数的实参列表
for(int i=0;i<arg1.length;i++)i
System.out.println("the arg1: "+arg1[i]);
}
//获取目标实现类的类路径
System.out.println("the arg2: "+arg2.getClass());
system.out.println("this is MyBeforeAdvice");
}


  1. 后置增强,在核心功能之后执行的额外功能
public class MyAfterAdvice implements AfterReturningAdvice{
@Override
public void afterReturning(Object arg0,Method argl,Object[] arg2,Object arg3)throws Throwable {
//获取反参参数的类型
system.out.println("the argo: "+argo.getClass());
/获取目标方法名称
system.out.println("the arg1 : "+arg1.getName());
获取目标方法多数的实参列表
for(int i=o;i<arg2.length;i++)
System.out.println("the arg2: "+arg2[i]);
)
广获取目标实现类的类路径
System.out.println("the arg3:"+arg3.getClass();
System.out.println("this is afterReturning advice");

  1. 异常增强,在核心功能发生异常时执行的额外功能
public class MyThrowsAdvice implements ThrowsAdvice{
public void afterThrowing(Method method,0bject[] args,Object target,Exception ex){
.System.out.println(target+"里面的"+method.getName()+"产生了"+ex.getMessage());

4.环绕增强,在核心功能之前以及之后执行的额外功能

public class MyInterceptor implements MethodInterceptor{
@override
public Object invoke(MethodInvocation argo)throws Throwable {
System.out.println("this is my interceptor");
//获取目标实现类对象
System.out.println("arg0.getThis()"+arg0.getThis().getClass().toString());
//获取目标方法名称
System.out.println("argo.getMethod() : "+arg0.getMethod().getName());
/获取目标方法参数的实参列表
Object[]arguments = argo.getArguments();
for(int i=O;i<arguments.length;i++)il
System.out.println("argo.getArguments() : "+arguments[i]);
}
7/由于启动了环绕增强,目标类的方法将不会被执行,而被.proceed取代,并返回目标类的反参
//执行目标方法
Object object = argo.proceed();
return object;

AOP注解
可以灵活的定义哪个具体的方法实现增强功能

  1. 写一个软 接口 创建或自定义一个注解
    @AnnotationLog
public @interface AnnotationLog {
//软接口

  1. 增强类照常写
  2. 修改切入点
<aop:pointcut expression="@annotation(com.gxy.aop.AnnotationLog)" id="myPointCut"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值