美文网首页
Spring boot切面不生效问题

Spring boot切面不生效问题

作者: 机灵鬼鬼 | 来源:发表于2021-05-18 18:35 被阅读0次

注解:

package com.test.aspdemo;

import java.lang.annotation.*;

/**
 * author:lss
 * @author ls
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Say {
  public String value() default "";
}

切面类:

(注意切面类一定要加上@Component注解,否则会不生效)原因是:底层会使用ApplicationContextUtil.getBean(Service.class); 这一行代码是向spring容器拿的实例,实际上是代理类,如果不用@Component注解,那么切面是不会进入容器的。

package com.test.aspdemo;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SayAspect {
    @Pointcut("@annotation(com.test.aspdemo.Say)")
    public void sayPointCut(){
        /**
         * 此方法体不会执行
         */
       // System.out.println("我要先说句话");
    }
    @Before("sayPointCut()")
    public void startForDinner(){
        System.out.println("我们该吃饭了");
    }

}

调用类:

package com.test.aspdemo;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class SayAspect {
    @Pointcut("@annotation(com.test.aspdemo.Say)")
    public void sayPointCut(){
        /**
         * 此方法体不会执行
         */
       // System.out.println("我要先说句话");
    }
    @Before("sayPointCut()")
    public void startForDinner(){
        System.out.println("我们该吃饭了");
    }

}

执行结果:


image.png

相关文章

网友评论

      本文标题:Spring boot切面不生效问题

      本文链接:https://www.haomeiwen.com/subject/uheyjltx.html