Использование Spring У меня были некоторые проблемы с выполнением инъекции зависимостей в аннотированном классе Aspect. CacheService вводится при запуске контекста Spring, но когда происходит переплетение, в нем говорится, что cacheService имеет значение null. Поэтому я вынужден перестроить весенний контекст вручную и получить из него компонент. Есть ли другой способ обойти это?Spring Dependency Injecting anotated Aspect
Вот пример моего Аспект:
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;
}
}
так просто установить метод aspectOf в моем классе аспектов, кажется, исправить это. Не уверен, почему это просто работает, потому что большинство других исправлений, которые я видел, не имеют. BTW попробовал @Configurable через пружинные аспекты и некоторые другие, но никто, казалось, не подключил bean-компонент к аспектному singleton. – PJH
Если вы пишете классический аспект аспекта, статический аксессор aspecOf генерируется компилятором aspectj: –