• java 注解实现AOP


    首先自定义注解

    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface AopTest {

    @AliasFor("cacheNames")
    String[] value() default {};

    @AliasFor("value")
    String[] cacheNames() default {};


    }
    定义一个aop配置类
    @Configuration
    @EnableAspectJAutoProxy
    public class AopConfig {
    @Bean
    public HelloAop getHelloAspct(){
    return new HelloAop();
    }
    }
    编写Aop类加上@Aspect注解
    @Aspect
    public class HelloAop {
      // 切入点
    @annotation(net.crisps.cloud.example.annotation.AopTest) 扫描在我们加了自定义注解的地方执行
        @Pointcut("@annotation(net.crisps.cloud.example.annotation.AopTest)")
    public void testBefore(){
    System.out.println("before------");
    }
    // @Before("@annotation(net.crisps.cloud.example.annotation.AopTest)")
    // public void before(){
    // System.out.println("before------");
    // }
    // @After("@annotation(net.crisps.cloud.example.annotation.AopTest)")
    // public void after(){
    // System.out.println("after------");
    // }
    // @AfterReturning(returning = "data", pointcut ="@annotation(net.crisps.cloud.example.annotation.AopTest)")
    // public void afterReturning(JoinPoint joinPoint, Object data){
    // System.out.println(data.toString());
    // }

       // 环绕切点执行此方法
    @Around("testBefore()")
    public Object before(ProceedingJoinPoint joinPoint) throws Throwable {
         // 获取到原本接口的方法,看是否需要调用接口的原本方法,不使用就直接返回了,不会执行原有接口的方法

    CacheOperationInvoker cacheOperationInvoker = getCacheOperationInvoker(joinPoint);
    cacheOperationInvoker.invoke();
    System.out.println(Arrays.toString(joinPoint.getArgs()));
    System.out.println("666666");
    return "tz";
    }

    private CacheOperationInvoker getCacheOperationInvoker(ProceedingJoinPoint joinPoint) {
    return () -> {
    try {
    return joinPoint.proceed();
    } catch (Throwable ex) {
    throw new CacheOperationInvoker.ThrowableWrapperException(ex);
    }
    };
    }
    }

    然后直接使用就可以了注意要加上我们自定义的注解
    @AopTest(value = "123")
    public String testAop() {
    System.out.println("执行aop方法");
    return "testAop";
    }


  • 相关阅读:
    pythos.access()
    CSS简笔画:纯CSS绘制一艘邮轮
    【每日坚果】如何成为一名数据工匠?
    【博客园使用小指南】DIY美化博客园小指南--主题设置
    乐字节Java反射之一:反射概念与获取反射源头Class
    乐字节Java面向对象三大特性以及Java多态
    在乐字节学习的一天(持续跟新……)
    在乐字节学习的一天(持续跟新……)
    乐字节Java变量与数据类型之二:Java常量与变量
    乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符
  • 原文地址:https://www.cnblogs.com/bt2882/p/13825470.html
Copyright © 2020-2023  润新知