aspectj-maven-plugin Lombok 共存及编译后织入

aspectj-maven-plugin Lombok 共存及编译后织入

应用场景:

通过AOP 方式拦截 es lowleve api 查询,处理返回结果失败的问题
需要处理方法:org.elasticsearch.client.RestClient#performRequest(org.elasticsearch.client.Request)

实现方案

编写AOP实现,通过maven插件aspectj-maven-plugin 将AOP逻辑织入es的client jar(elasticsearch-rest-client-7.6.2.jar)包中。

1. 编写AOP逻辑

主要代码

import static org.apache.http.HttpStatus.SC_MULTIPLE_CHOICES;
import static org.apache.http.HttpStatus.SC_OK;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.util.EntityUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * es 切面管理
 */
@Aspect
public class ElasticsearchAspectj {

    /**
     * 日志对象
     */
    private static Logger log = LoggerFactory.getLogger(ElasticsearchAspectj.class);

    @Pointcut("execution(org.elasticsearch.client.Response org.elasticsearch.client.RestClient.performRequest(org.elasticsearch.client.Request))")
    public void restClientPerformRequest() {
    }

    /**
     * es client 查询处理
     */
    @Around("restClientPerformRequest()")
    public Object restClientPerformRequestProcess(ProceedingJoinPoint pj) throws Throwable {
        Object[] args = pj.getArgs();
        Request request = null;
        if (args.length > 0) {
            request = (Request) args[0];
        }
        Response response = (Response) pj.proceed();
        //todo
        handleResponse(response, request);
        return response;
    }

}

2. pom 相关配置

	<dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${aspectjweaver.version}</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <scope>compile</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>${aspectj-maven-plugin.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <proc>none</proc>
                    <complianceLevel>${java.version}</complianceLevel>
                    <showWeaveInfo>false</showWeaveInfo>
                    <forceAjcCompile>true</forceAjcCompile>
                    <sources/>
                    <weaveDirectories>
                        <weaveDirectory>${project.build.directory}/classes</weaveDirectory>
                    </weaveDirectories>
                    <weaveDependencies>
                        <weaveDependency>
                            <groupId>org.elasticsearch.client</groupId>
                            <artifactId>elasticsearch-rest-client</artifactId>
                        </weaveDependency>
                    </weaveDependencies>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3. 打包编译

  • 执行打包编译命令
    mvn -DskipTests=true -pl 项目名称 -am clean package
  • 可以确认一下jar包或者target中是否包含 重新编译后的文件:
  • 在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值