spring 注解aop不生效

spring 注解aop不生效

2017年06月28日 09:50:58

阅读数:5639

首先基础要理解spring配置文件和springmvc配置文件

spring注解不生效可从以下几个方面找原因

1 springmvc的配置文件中只配置扫描@Controller的注解,spring的配置文件扫描除了@Controller的注解的其他的注解

2 检查@Pointcut 的表达式是否正确

3 如果在service层aop 可以生效,controller层不生效,把  <aop:aspectj-autoproxy proxy-target-class="true"/>添加到到springmvc的配置文件中

附上aop 注解代码

 
  1. @Component

  2. @Aspect

  3. public class LoginAspect {

  4. private Logger logger=LoggerFactory.getLogger(LoginAspect.class);

  5. public LoginAspect(){

  6. }

  7. @Pointcut("execution(* com.zyc.service..*.*(..))")

  8. public void point(){}

  9. @Pointcut("execution(* com.zyc.controller.*.*(..))")

  10. public void pointcontroller(){}

  11.  
  12. /**

  13. * 配置环绕通知

  14. * @param joinPoint

  15. * @return

  16. * @throws Throwable

  17. */

  18. @Around("pointcontroller()")

  19. public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable{

  20. logger.debug("进入aoparound方法");

  21. if(checkPass(joinPoint.getSignature().getName())){

  22. return joinPoint.proceed();

  23. }

  24. HttpServletRequest request=getHttpServletRequest();

  25. String account=request.getParameter("account");

  26. logger.debug(account);

  27. return joinPoint.proceed();

  28. }

  29. /**

  30. * 检查是否需要验证登录

  31. * @param method

  32. * @return

  33. */

  34. private boolean checkPass(String method){

  35. switch(method){

  36. case "login":

  37. return true;

  38. case "register":

  39. return true;

  40. }

  41. return false;

  42. }

  43. /**

  44. * 获取request

  45. * @return

  46. */

  47. protected HttpServletRequest getHttpServletRequest(){

  48. return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

  49. }

  50. }


springmvc配置文件中主要配置

 
  1. <aop:aspectj-autoproxy proxy-target-class="true"/>

  2.  
  3. <!-- 扫描controller, 如果全部扫描所有注解可能会导致springmvc映射不管用或者事物失效-->

  4. <context:component-scan base-package="com.zyc.controller"

  5. use-default-filters="false">

  6. <context:include-filter type="annotation"

  7. expression="org.springframework.stereotype.Controller" />

  8. </context:component-scan>

spring配置文件中主要配置

 
  1. <!-- 不扫描controller注解,不然会导致事物失效 -->

  2. <context:component-scan base-package="com.zyc">

  3. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />

  4. </context:component-scan>

  5. <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

在以上配置中

proxy-target-class="true" 属于动态代理的方式选择,有兴趣的朋友可以看看其他资料

猜你喜欢

转载自blog.csdn.net/f45056231p/article/details/81842975