基于AsceptJ注解的AOP编程

本文介绍了基于AspectJ注解的AOP编程,详细阐述了简化后的开发步骤,包括自定义类实现额外功能、使用@Aspect和@Around注解、切入点复用以及如何通过配置切换动态代理的创建方式。通过示例代码展示了如何定义和使用切入点表达式,以及如何在多个方法中复用这些切入点。同时,讨论了如何在配置文件中切换JDK动态代理和CGlib动态代理的使用。
摘要由CSDN通过智能技术生成

基于AsceptJ注解的AOP编程

1. 开发步骤

  1. 提供原始类对象
  2. 实现额外功能
  3. 配置切入点
  4. 组装切面

上面这几步是面向AOP编程的大致步骤,而基于注解的AOP编程会简化AOP开发的过程。

基于注解的AOP开发步骤:

  1. 自定义类用于实现额外功能和组装切面
  2. 在类上标记@Ascept注解
  3. 自定义需要实现额外功能的方法,方法的参数要写ProceedingJoinPoint 类型(通过使用此类型可以执行原始方法),方法的返回值设置为Object类型,用于返回原始方法的返回值。
  4. 在自定义的方法上标记@Around注解并配置注解的值(切入点表达式)
  5. 进行测试

代码:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

@Aspect
public class MyAspect {

    @Around("execution(* login(..))")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("---aspect log---");
        Object ret = joinPoint.proceed();
        return ret;
    }
}

配置文件:

<!--提供原始类对象-->
<bean id="userService" class="com.jc.aspect.UserServiceImpl"/>

<!--注入自定义类-->
<bean id="arround" class="com.jc.aspect.MyAspect"/>

<!--告知Spring基于注解进⾏AOP编程-->
<aop:aspectj-autoproxy/>

2. 切入点的复用

如果有多个方法需要额外功能,就需要写多@Around注解,但是execution表达式函数内的表达式会出现冗余的现象,所以引入切入点复用技术。

使用方式:

在切面类中定义⼀个方法上面标记@Pointcut注解通过这种方式,定义切入点表达式,后续更加有利于切入点复用。

代码:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class MyAspect {

    @Pointcut("execution(* login(..))")
    public void myPointcut() {}

    @Around(value="myPointcut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("---aspect log---");
        Object ret = joinPoint.proceed();
        return ret;
    }

    @Around(value="myPointcut()")
    public Object around1(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("---aspect tx---");
        Object ret = joinPoint.proceed();
        return ret;
    }
}

3. 切换动态代理的创建方式

AOP底层是动态代理,动态代理的实现方式有两种,JDK动态代理和CGlib动态代理。

通过更改配置的方式可以切换动态代理的实现方式。

  1. 基于注解AOP开发:

    <aop:aspectj-autoproxy proxy-target-class="true" />
    
  2. 原始的AOP开发:

    <aop:config proxy-target-class="true">
    </aop>
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神烦狗闯入了你的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值