2013-07-24 37 views
2

我正在使用以下結構,但失敗但未能創建代理服務器調用。Spring AOP與MVC結構不兼容

在控制器servlet.xml中

<context:component-scan base-package="com.controller" /> 
    <mvc:annotation-driven/> 
    <mvc:resources mapping="/static/**" location="/static/" />  
    <mvc:default-servlet-handler/> 

在應用程序的context.xml

<context:component-scan base-package="com.common" /> 
    <context:component-scan base-package="com.dao" /> 
    <mvc:annotation-driven/> 

    <aop:aspectj-autoproxy /> 

    <!-- Aspect Bean Definition 
    <bean id="aspectBean" class="com.common.AspectImple" /> --> 

方面類

package com.common; 

import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.springframework.stereotype.Component; 

@Aspect 
@Component 
public class AspectImple { 


    @Before("execution(* com.controller.JobController.*(..))") 
     public void beforeImpl() { 
      System.out.println(" Before Done "); 
    } 

} 

Controller類

@Controller 
    public class JobController { 

     @RequestMapping(method = RequestMethod.GET, value = "/xyz") 
     public ModelAndView abc(HttpServletRequest request, 
      HttpServletResponse response) { 
      ... 
      m1(10); 
      ... 
      } 
    } 

    public void m1(int i){ 
     System.out.println(" AOP Done "); 
    } 

AOP不工作,並且在調用abc(..)& m1(..)方法期間,beforeImpl()沒有被調用。有人可以幫我解決這個問題。

+0

yes。我的Maven依賴於AOP .. \t \t \t org.aspectj \t \t \t aspectjrt \t \t \t 1.6.12 \t \t \t \t \t \t \t org.aspectj \t \t \t aspectjweaver \t \t \t 1.6.12 \t \t \t \t \t \t \t CGLIB \t \t \t CGLIB的節點p \t \t \t 2。2 \t \t

+0

對不起,我無法正確編輯它。 Aspectjrt,Aspectjweaver和cglib已被使用 –

+0

既不在abc()也不在m1()上工作? – Hippoom

回答

5

關於移動

<context:component-scan base-package="com.dao" /> 
<mvc:annotation-driven/> 

<aop:aspectj-autoproxy /> 

從應用程序的context.xml到控制器servlet.xml中怎麼辦?

要應用的方面和bean需要位於相同的ApplicationContext中,但ApplicationContext不知道WebApplicationContext。在註釋控制器

+0

好的。讓我試試 –

+0

太好了。有用。非常感謝你Hippoom –

2

我有同樣的問題,但我使用基於註解的配置。爲了讓AOP在@Controller上工作,這樣做的訣竅是:

@Configuration 
@EnableAspectJAutoProxy(proxyTargetClass=true) 
@ComponentScan(basePackages = {"com.mypackage"}) 
public class MvcConfig extends WebMvcConfigurationSupport 
{ 
    ... 

    @Bean 
    public MyAspect myAspect() 
    { 
     return new MyAspect(); 
    } 

} 
+0

提供了一個基於xml的解決方案以及那是預期的問題 –

相關問題