spring 切面aop实现

切面层

@Aspect //作用是把当前类标识为一个切面供容器读取
@Component //把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>
public class LogInfoAspect {

   //value = "指向注解类" 用于调用切面功能 @Pointcut(value
= "@annotation(com.main.entity.annotation.LogInfo)") public void LogInfoAspect(){ }

   //@Around:环绕增强,相当于MethodInterceptor
   //@AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行
   //@Before:标识一个前置增强方法,相当于BeforeAdvice的功能
//@AfterThrowing:异常抛出增强,相当于ThrowsAdvice
  //
@After: final增强,不管是抛出异常或者正常退出都会执行
// 在这里定义前置切面
    @Before("LogInfoAspect()")
    public void beforeMethod(JoinPoint joinPoint) {

        // 这里执行保存日志的动作
        System.out.println("before .......");
        //得到被切方法的参数
        System.out.println(joinPoint.getArgs()[0]);
    }
}

 写一个注解

@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.METHOD)  //定义方法上
public @interface LogInfo {
    boolean value() default true;
}

Controller层

@LogInfo
    @RequestMapping(value = "/trrtt")
    public String trrtt(HttpServletRequest request, Model model) {
      return “success”
    }

 

posted @ 2022-08-23 23:46  李蚊秀香  阅读(71)  评论(0编辑  收藏  举报