Uso di Spring Ho riscontrato alcuni problemi con l'esecuzione di un'iniezione di dipendenza su una classe Aspect con annotazioni. CacheService viene iniettato all'avvio del contesto Spring, ma quando avviene la tessitura, indica che cacheService è null. Quindi sono costretto a ricominciare manualmente il contesto di primavera e ottenere il bean da lì. C'è un altro modo per farlo?Dipendenza di primavera Iniezione di un Aspetto annotato
Ecco un esempio del mio aspetto:
import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import com.mzgubin.application.cache.CacheService;
@Aspect
public class CachingAdvice {
private static Logger log = Logger.getLogger(CachingAdvice.class);
private CacheService cacheService;
@Around("execution(public *com.mzgubin.application.callMethod(..)) &&"
+ "args(params)")
public Object addCachingToCreateXMLFromSite(ProceedingJoinPoint pjp, InterestingParams params) throws Throwable {
log.debug("Weaving a method call to see if we should return something from the cache or create it from scratch by letting control flow move on");
Object result = null;
if (getCacheService().objectExists(params))}{
result = getCacheService().getObject(params);
} else {
result = pjp.proceed(pjp.getArgs());
getCacheService().storeObject(params, result);
}
return result;
}
public CacheService getCacheService(){
return cacheService;
}
public void setCacheService(CacheService cacheService){
this.cacheService = cacheService;
}
}
così semplicemente l'impostazione del metodo aspectOf nella mia classe aspetto sembra risolvere questo problema. Non sono sicuro del perché funzioni semplicemente perché la maggior parte delle altre correzioni che ho visto non hanno funzionato. BTW ha provato @Configurable tramite gli aspetti di primavera e alcuni altri, ma nessuno sembrava collegare correttamente il bean all'aspetto singleton. – PJH
Se si scrive il classico aspetto aspetto, l'accessore statico aspecOf viene generato dal compilatore aspectj: –