我有一个外部库,它不是spring应用程序。它定义了很少的Aspectj函数/PointCuts,但是当我在一个spring启动应用程序中使用这个库时,它不会被调用。当我在spring boot应用程序本身中定义切入点时,它工作得很好。我猜是我的配置出了问题,比如@EnableAspectJAutoProxy不能工作,或者别的什么。
服务代码-:
@EnableAspectJAutoProxy
@Service
public class LtRequest {
RestTemplate restTemplate;
public LtRequest() {
restTemplate = new RestTemplate();
restTemplate.setErrorHandler( new LtResponseErrorHandler());
}
public Object request(String url, LtRequestType type, Class clz){
return null;
}
public RestResponseDTO getObject(String url,Class clz){
RestResponseDTO restResponseDTO =restTemplate.getForObject(url,RestResponseDTO.class);
//LtUtil.parseRequest(restResponseDTO);
return restResponseDTO;
}
private void postObject(String url,Object obj){
RestResponseDTO restResponseDTO =restTemplate.postForObject(url,obj,RestResponseDTO.class);
}
}aspectj切入点的代码
@Aspect
@Component
public class ParseRequestAspect {
static final Logger logger = LogManager.getLogger(ParseRequestAspect.class);
@Around("execution(* com.limetray.helper.utils.LtRequest.getObject(..))")
public Object parseRequestAfterReturn(ProceedingJoinPoint joinPoint) {
logger.info("calling after return aspect function..");
try{
RestResponseDTO response = (RestResponseDTO) joinPoint.proceed();
LtUtil.parseRequest(response);
return response.getResult();
}
catch (Throwable e){
throw new LtException("Exception occured while parsing request response..");
}
}
@After("execution(* com.limetray.helper.utils.LtRequest.getObject(..))")
public void parseRequestAfterReturn(JoinPoint joinPoint) {
logger.info("calling after return aspect function..new");
try{
/*RestResponseDTO response = (RestResponseDTO) joinPoint.proceed();
LtUtil.parseRequest(response);
return response.getResult();*/
}
catch (Throwable e){
throw new LtException("Exception occured while parsing request response..");
}
}
}这两个类都在我的外部库中,但它并不像预期的那样工作。请帮帮忙。
发布于 2016-09-03 18:47:21
如果希望在Spring应用程序中使用原生AspectJ方面,而不是基于代理的Spring AOP,则需要分别通过@EnableLoadTimeWeaving或<context:load-time-weaver/>将应用程序配置为使用LTW (加载时编织)。有关详细信息,请参阅Spring manual。
https://stackoverflow.com/questions/39268613
复制相似问题