【问题标题】:AOP in Spring Web MVC not workingSpring Web MVC中的AOP不起作用
【发布时间】:2015-02-07 15:45:08
【问题描述】:

我正在创建 Spring MVC MyBatis 应用程序,我正在应用 AOP,但它不工作。我在 AOP 的 xml 中使用了以下配置:

  <context:component-scan base-package="com.peter" />
  <mvc:annotation-driven />
  <aop:aspectj-autoproxy />

我已经为 AOP 添加了下面的 jars:

  aspectjrt-1.7.4.jar
  aspectjtools-1.7.4.jar
  spring-aop-3.1.0.RELEASE.jar
  aopalliance.jar

下面是我的控制器:

    package com.peter.controllers;

    @Controller
    @RequestMapping(value = "/registration")
    public class RegistrationController {

          private RegistrationValidator validator = null;
          private UserService userService = null;

    @Autowired
    public void setUserService(UserService userService) {
       this.userService = userService;
    }

   public RegistrationValidator getValidator() {
      return validator;
   }

   @Autowired
   public void setValidator(RegistrationValidator validator) {
       this.validator = validator;
   }

    @RequestMapping(method = RequestMethod.GET)
    public String showForm(ModelMap model) {
        System.out.println("show form");
        List<User> users = userService.getAllUser();
        model.addAttribute("users", users);
        User user = new User();
        user.setId(UUID.randomUUID().toString());
        user.getId();
        model.addAttribute("user", user);
        return "registration";
}

   @RequestMapping(value = "/add", method = RequestMethod.POST)
   public ModelAndView add(@ModelAttribute(value = "user") User user,
        BindingResult result) {
      System.out.println("add");

      validator.validate(user, result);
      ModelAndView mv = new ModelAndView("registration");
      if (!result.hasErrors()) {
           userService.saveUser(user);
           user = new User();
           user.setId(UUID.randomUUID().toString());
           mv.addObject("user", user);
       }
       mv.addObject("users", userService.getAllUser());
       return mv;
     }

 }

下面是我的 AOP 记录器:

   package com.peter.logger;

   @Component
   @Aspect
   public class MethodLogger {

    @Pointcut("execution(* com.peter.*.*(..))")
    private void selectAll() {
        System.out.println("Point cut stat");
    }

    @Before("execution(* com.peter.domain.User.setId(..))")
    public void logBefore(JoinPoint joinPoint) {
         System.out.println("logBefore() is running!");
         System.out.println(joinPoint.getSignature().getName());
   }

}

AOP Logger 没有在控制台上打印任何 sysout,其他一切正常。它也没有显示任何错误。有人可以帮我吗?

【问题讨论】:

  • 你检查编译错误了吗? com.peter 包或 com.peter 的子包中是否还有方法?
  • @javadev :没有编译错误。我在 com.peter 的子包中有方法
  • 您应该在 selectAll() 方法上将 Pointcut 定义为 @PointCut("execution(* com.peter..*.*)") 。注意:peter 后面是两个点
  • @javadev :我试着像你提到的那样放两个点,但没有运气。

标签: java spring-mvc spring-aop


【解决方案1】:

你试过了吗:

<aop:aspectj-autoproxy proxy-target-class="true">
  <aop:include name="methodLogger"/>
</aop:aspectj-autoproxy>

另见this

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多