gpt4 book ai didi

java - Aspectj 通过外部库实现功能

转载 作者:行者123 更新时间:2023-12-02 03:23:43 25 4
gpt4 key购买 nike

我有一个外部库,它不是 Spring 应用程序。它定义了一些 Aspectj 函数/切入点,但当我在 Spring Boot 应用程序中使用这个库时,它没有被调用。当我在 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..");

}


}
}

这两个类都在我的外部库中,但它没有按预期工作。请帮忙。

最佳答案

如果您想在 Spring 应用程序中使用 native AspectJ 方面,而不是基于代理的 Spring AOP,则需要通过 @EnableLoadTimeWeaving 将应用程序配置为使用 LTW(加载时编织)或<context:load-time-weaver/> , 分别。请参阅Spring manual了解更多信息。

关于java - Aspectj 通过外部库实现功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39268613/

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