2015-02-07 107 views
1

我創建的Spring MVC的MyBatis應用程序,我將AOP應用,但它不是working.I已經在XML中使用以下配置AOP:AOP在Spring Web MVC框架不工作

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

而且我在下面加AOP的罐子:

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記錄器不在控制檯上打印任何sysout,其他所有工作都正常。它也沒有顯示任何錯誤。有人可以幫我嗎?

+0

你檢查了編譯錯誤嗎?你也有方法只是在com.peter包或在com.peter的子包中? – 2015-02-07 04:44:29

+0

@javadev:沒有編譯錯誤。我有com.peter的子包內的方法 – Peter 2015-02-07 04:51:15

+0

您應該在selectAll()方法上將Pointcut定義爲@PointCut(「execution(* com.peter .. *。*)」)。注意:在peter之後是兩個點 – 2015-02-07 04:54:14

回答

0

你試過:

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

另見this