@Aspect 注解生效的基本条件 和 Controller 不生效原因

前几天学习了Spring AOP  想应用在项目中完成控制层的日志展示。

将请求@RequestMapping注解的方法的request对方和返回的result(自定义类型)抓取到,进行日志管理

使用了@AfterReturning

返回前通知 中获取request的方法不能通过joinPoint.getArgs()方法,得通过如下方法

HttpServletRequest  request =  ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

Spring上下文中会记录request的对象

 

现在对遇到的几个问题进行下总结。

1、AOP代理的类,必须是在程序起来时,加载完毕的(装配到beanFactory)中的,对业务中后期创建的对象(new 出来的)不会被切面捕捉到。得通过getBean().

 

2、对于控制层@Controller标记的类中的@ReuqestMapping方法,当

       

不在同一个xml中,会出现@Controller中的方法切不到的情况。

 

3、另想要直接切被@RequestMapping注解的方法,在切点定义时可以写为

@Poincut("@annotation(org.springframework.web.bind.annotation.RequestMapping) && execution(* com .wenzy..*(..))")

&&后面的为指定包(正则表达式)  这样就可以将两种条件结合起来了。

 

 

你可能感兴趣的:(Spring)