java - Spring Web MVC 中的 AOP 不起作用

标签 java spring-mvc spring-aop

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

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

我为 AOP 添加了以下 jar:

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

下面是我的 Controller :

    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 记录器未在控制台上打印任何系统输出,其他一切都工作正常。它也没有显示任何错误。有人可以帮我吗?

最佳答案

你尝试过吗:

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

另请参阅this .

关于java - Spring Web MVC 中的 AOP 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28378484/

相关文章:

Spring 3.2 配置 tx :annotation-driven error in eclipse

java - Spring 框架 : Configure infrastructure bean via xml

java - Spring AOP 切入点表达式中包名称的通配符支持

java - 将列表列表随机分组为 N 个子集,每个子​​集有 K 个元素

Java 8 : How to use javadoc aggregate

java - 如何将泛型对象作为泛型参数传递给 java 中的其他方法?

Spring 3 MVC : is it possible to have a spring form without 'commandName' binding?

java - 在 Java 中手动插入 arg 作为第一个元素

java - 由entrySet()返回的Set上的contains()和remove()的行为

java - 使用 <context :annotation-config/> in ApplicationContext. xml 时自动连线注释不起作用