Sử dụng Spring Tôi đã gặp một số vấn đề khi thực hiện tiêm phụ thuộc vào lớp Aspect được chú thích. CacheService được tiêm khi khởi động bối cảnh của Spring, nhưng khi quá trình dệt diễn ra, nó nói rằng cacheService là null. Vì vậy, tôi buộc phải sửa lại bối cảnh mùa xuân bằng tay và lấy hạt từ đó. Có cách nào khác để thực hiện nó không?Phụ thuộc mùa xuân Tiêm một chú thích Aspect
Dưới đây là một ví dụ về Aspect của tôi:
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;
}
}
vì vậy chỉ cần thiết lập phương thức aspectOf trong lớp khía cạnh của tôi dường như khắc phục điều này. Không chắc chắn lý do tại sao điều này chỉ đơn giản là làm việc vì hầu hết các bản sửa lỗi khác mà tôi đã thấy không có. BTW đã thử @Configurable thông qua các khía cạnh mùa xuân và một số người khác nhưng dường như không ai có thể gắn dây đúng cách với singleton aspectj. – PJH
Nếu bạn viết khía cạnh khía cạnh cổ điển, trình truy cập tĩnh aspecOf được tạo bởi trình biên dịch aspectj: –