gpt4 book ai didi

Spring依赖注入(inject)带注释的Aspect

转载 作者:行者123 更新时间:2023-12-02 08:48:08 24 4
gpt4 key购买 nike

使用 Spring,我在对带注释的 Aspect 类进行依赖项注入(inject)时遇到了一些问题。 CacheService是在Spring上下文启动时注入(inject)的,但是当编织发生时,它说cacheService为空。所以我被迫手动重新查找 spring 上下文并从那里获取 bean。还有其他方法吗?

这是我的方面的示例:

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

最佳答案

由于切面是在 Spring 容器之前创建的,因此您必须从切面的工厂方法aspectOf(ExampleClass.class) 中检索切面。

从 Spring XML 配置中,您可以像这样检索方面(对象):

<bean id="traceAspect" class="aspects.trace.TraceAspect"
factory-method="aspectOf" />

工厂方法是检索在 Spring 容器外部创建的对象(如 Enum)的常规方法。

关于Spring依赖注入(inject)带注释的Aspect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1343952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com