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” }