Aspect获取第三方jar包的切面


在之前总以为Aspect的使用场景有限,只能获取项目内类的切面,原来并非如此。

1. 引入依赖

在项目中引用相关依赖

<dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.13</version>
    </dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.6</version>
    <scope>runtime</scope>
</dependency>


 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.10</version>
    <configuration>
        <complianceLevel>1.8</complianceLevel>
        <source>1.8</source>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
 </plugin>

2. 编写Aspect表达式

举例

package io.github.iamazy.example;

@Aspect
public class LogAspect {

    @Around("annotation(io.github.iamazy.demo.Logger)")
    public void log(Proceedingjoinpoint joinpoint) {
        // log action
    }
}

其中io.github.iamazy.demo.Logger是第三方依赖中的注解,且第三方依赖依赖使用了这个注解

3. 编写aop.xml文件

aop.xml位于resources/META-INF下/

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspect.dtd>
<aspectj>
    <weaver options="-verbose">
        <include within="io.github.iamazy.action.*" />
    </weaver>
    <aspects>
        <aspect name="io.github.iamazy.example.LogAspect" />
    </aspects>
</aspectj>

其中io.github.iamazy.action.*就是第三方依赖中使用io.github.iamazy.demo.Logger注解的路径,如果有多个,继续添加<include/>即可。

4. 启动项目

在启动项目时,需要指定VM参数,如果是部署项目,可以写在shell脚本中。

-javaagent: /path/aspectweaver-1.9.6.jar

最后你就会惊奇的发现,真的可以获取第三方依赖的切面,然后搞搞事情!!!


文章作者: iamazy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iamazy !
 本篇
Aspect获取第三方jar包的切面 Aspect获取第三方jar包的切面
在之前总以为Aspect的使用场景有限,只能获取项目内类的切面,原来并非如此。 1. 引入依赖在项目中引用相关依赖 <dependency> <groupId>org.aspectj</groupId>
2020-11-19
下一篇 
追梦少年 追梦少年
追梦少年我踏进一片梦想的海遥望那无尽的边界汹涌的海水波涛澎湃我的心儿微起漪涟 那是一片怎样广阔的天天空的云朵在绽放怎样的笑脸飘逸的风儿呼啸而过荡漾在空中飞舞绵延 这是一个彩色的世界青青的草地和低舞的蝴蝶梦幻般的花朵装扮着鲜艳你我
2020-09-17
  目录