2010-12-27 12 views
8

アスペクトの内側にあるオブジェクトを注入しようとしています。しかし、それは常にnullになります。このインターセプタは、したがって、次のように定義さスプリングがアスペクトで注入できない

<context:load-time-weaver /> 
<context:component-scan base-package="framework.interceptor" /> 

@Aspect 
public class LoggingInterceptor { 
    @Autowired 
    EventLogManager eventLogManager; 
..... 
} 

私のユニットテストは、このようなものであることを除いスプリングによって管理されていないAspectJのを使用してドメインオブジェクトを注入するために使用されました。 asa.execute()が呼び出されると、LoggingInterceptorによって傍受されますが、LoggingInterceptor.eventLogManagerは常にnullです。しかし、以下のtestInjection()はうまく動作します。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {  "classpath:applicationContext-dao.xml", 
            "classpath:applicationContext-service.xml", 
            "classpath:applicationContext-resources.xml", 
            "classpath:LoggingTest-context.xml"}) 
public class LoggingInterceptorTest { 

    @Autowired 
EventLogManager eventLogManager; 

@Test 
public void testInjection(){ 
    Assert.assertNotNull(eventLogManager); 
} 

@Test 
public void testAccountSaveActionAdvice(){ 
    AccountSaveAction asa = new AccountSaveAction(); 
    asa.execute(); 
} 
} 

私のApplicationContext-service.xmlには、META-INFに次の

<bean id="eventLogManager" 
    class="service.impl.EventLogDBManagerImpl"> 
    <property name="eventLoggingDao" ref="eventLoggingDao" /> 
</bean> 

私aop.xmlは動作しませんでした。この

<aspectj> 
<weaver> 
    <!-- only weave classes in this package --> 
    <include within="action..*" /> 
</weaver> 
<aspects> 
    <!-- use only this aspect for weaving --> 
    <aspect name="interceptor.LoggingInterceptor" /> 
</aspects> 
</aspectj> 

答えて