切面层
@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”
}