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>