【问题标题】:Aspectj functions through external library通过外部库的 Aspectj 函数
【发布时间】:2016-09-01 10:07:00
【问题描述】:

我有一个不是 Spring 应用程序的外部库。它定义了一些 Aspectj 函数/PointCuts,但是当我在 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..");

        }


    }
}

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

【问题讨论】:

    标签: java spring-boot aop aspectj


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2022-12-05
      • 2011-10-24
      • 1970-01-01
      • 2019-01-24
      • 2016-08-28
      • 2019-03-09
      相关资源
      最近更新 更多