2010-10-21 18 views
7

@Controller, ek açıklama tabanlı bir yaklaşım kullanarak bir Spring 3 Web MVC projesi kurmaya çalışıyorum.@ İlkbaharda @Controller ile @Aspect'i nasıl birleştirebilirim?

package my.package 

@Controller 
@RequestMapping("/admin/*") 
public class AdminMultiActionController { 

@RequestMapping(value = "admin.htm", method = RequestMethod.GET) 
public String showAdminSection() { 
    return "admin"; 
} 

Benim memuru-servlet aşağıdaki Kontrolör işleyicileri vardır: Webapp verilen maven eserler ile iyi çalışıyor

<context:component-scan base-package="my.package" /> 
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> 
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> 

:

<dependency> 
<groupId>org.springframework</groupId> 
<artifactId>spring-webmvc</artifactId> 
<version>3.0.2.RELEASE</version> 
</dependency> 

Şimdi @AspectJ AOP'yi eklemek istedim .

<aop:aspectj-autoproxy/> 

yanı applicationContext.xml ilgili fasulye oluşturmak için emin oldum:

<dependency> 
<groupId>org.aspectj</groupId> 
<artifactId>aspectjweaver</artifactId> 
<version>1.6.9</version> 
</dependency> 
<dependency> 
<groupId>org.aspectj</groupId> 
<artifactId>aspectjrt</artifactId> 
<version>1.6.9</version> 
</dependency> 

benim applicationContext.xml eklendi: Ben kütüphanelerini var

<bean id="securityInterceptor" class="my.package.service.SecurityInterceptor"/> 

Ve başladı

package my.package.service 

@Aspect 
public class SecurityInterceptor { 

@Pointcut("execution(* showAdminSection(..))")// the pointcut expression 
private void foo() { 
    System.out.println("fooo"); 
}// the pointcut signature 
: @Aspect ortaya koymasıyla

Şimdi bu çalışmayı durdurdu. "fooo" asla yazdırılmaz.

Köşeli (yazım nesnesi) nesneler, yay yönlendirmeli çekirdekler olmalı ve DefaultAnnotationHandlerMapping ile birlikte @Controller, bu şekilde algılanmıyor olabilir mi?

Herhangi bir yardım için teşekkür ederiz. Herhangi bir bilgiyi eklemeyi unutursam, lütfen sorun. Birisi bana burada yardımcı olabilir umarım.

Çok teşekkürler!

cevap

3

pointcut yöntemi bir maç çağrılmadığı, pointcut tanımlar, aslında ne bir şey tanımlamak gerekir. ör.,

8

Argh tanrısı .. nihayet işe yaradı!

Cevabınız için teşekkürler Affe! Merak edenler için

:

  1. bahar xml
  2. Teli'ni sizin kontrolörleri aop iken memuru-servlet'dir
  3. Do söylememem denetleyicileri onları almak için bileşen-tarama ve defaultannotationhandlers kullanmayın config applicationContext'te oturur.tavsiye unutma: Affe haklı Tabii memuru-sunucu uygulaması

  4. hem

  5. Taşı p ​​

+2

Nokta 3 bit benim için eksik olan, teşekkürler :) – Custard

7

ikinci chzbrgla, To üstü (benim gibi bu görüntülemek isteyenler için), bu yüzden gibi hareket memuru servlet'dir kontrolör bileşeni tarama ve aop yapılandırma taşıdıktan sonra sorunumu çözdü:

... 
<context:component-scan base-package="com.mypackage.controller"/> 
<!-- Configure aspects. --> 
<bean id="myAspect1" class="com.mypackage.intercept.SiteAccessAspect"/> 

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

bileşen tarama hala benim durumumda çalıştı görebileceğiniz gibi. Her ikisini de dağıtıcı sunucu uygulamasına taşımak benim için çözdü. aşağıdaki gibi

apspect (bu durumda myApect1) yapılandırıldı:

@Pointcut("within(@org.springframework.stereotype.Controller *)") 
public void controller() {} 

@Pointcut("execution(* *(..))") 
public void method() {} 

@Before("controller() && method()") 
public void doAccessCheck(JoinPoint joinPoint) { 
System.out.println(joinPoint.getSignature()); // For testing purposes. 
} 
+0

i yukarıda belirtilen yönü kullanmaya çalıştığında, i' pointcut kontrolör org.aspectj.weaver.tools.PointcutParser.parsePointcutExpression (PointcutParser.java:302) de \t 0 başvurulan bulmak edemez :: hatayı: java.lang.IllegalArgumentException: m aşağıda neden Olduğu hata alıyorum Org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression'da \t (AspectJExpress ionPointcut.java:207 \t org.springframework.aop.aspectj.AspectJExpressionPointcut.buildPointcutExpression .............................. ................................................. Lütfen önermek –

İlgili konular