2010-12-27 21 views
8

Estoy tratando de inyectar un objeto que está dentro de un aspecto. Pero siempre resulta nulo. este interceptor se utiliza para inyectar objetos de dominio utilizando aspectj por lo tanto, no se maneja por el muelle, excepto la siguiente definiciónprimavera no se puede inyectar en el aspecto

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

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

mi prueba de unidad es algo como esto. cuando se llama a asa.execute() es interceptado por LoggingInterceptor, pero LoggingInterceptor.eventLogManager siempre es nulo. Pero testInjection() a continuación funciona bien.

@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(); 
} 
} 

mi applicationContext-service.xml tiene la siguiente

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

mi aop.xml en META-INF tiene este aspecto

<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> 

Respuesta

Cuestiones relacionadas