【问题标题】:Can I hide ***$AjcClosure*.class files created by aspectj-maven-plugin?我可以隐藏由 aspectj-maven-plugin 创建的 ***$AjcClosure*.class 文件吗?
【发布时间】:2017-02-06 09:28:12
【问题描述】:

我在方法中使用aspectj-maven-plugin生成记录器,方法是注解驱动的。

编译后,对于定义注释的每个方法,我可以看到在我各自的目标类文件夹中生成了一个***$AjcClosure*.class 文件。

问题:

  1. 虽然这是一个编译时活动,但有什么方法可以避免在编译结束后将这些类放在我的类文件夹中?

  2. 如果不是,这些类的用途是什么?它们不会影响创建的 jar/war 文件的大小,从而影响应用程序中添加的每个注释的总体开销吗?

Java 版本:1.7 & AspectJ Maven 插件当前配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.5</version>
    <configuration>
        <source>${java.version}</source>
        <target>${java.version}</target>
        <complianceLevel>1.7</complianceLevel>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

【问题讨论】:

  • 为什么这些类的存在是个问题? AspectJ 需要它们才能正常工作。
  • 嗨 Tunaki,在反编译后我可以看到这些类是空的。 class{} 可用的代码只有这么多。这样的课程可能需要什么?此外,当我通过命令提示符运行项目构建时,不会生成这些类..
  • 也许你被反编译器愚弄了……
  • 好吧,我能对这个评论说什么:) 我在证明!
  • 另外,我在这里重复第 2 点,即为源代码中添加的每个注释创建一个文件 - 无论出于何种目的,这都是一个好的代码/想法吗?

标签: maven aspectj-maven-plugin


【解决方案1】:

在做了几次试验和错误之后,我发现@Around 建议导致这些类被创建。详情请参考White paper on optimizing Aspects

现在,我正在使用@Before 和@After 通知来达到记录的目的,方法之前和之后。

我可能错了,但这对我有用。请随时发布您的 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2011-03-29
    相关资源
    最近更新 更多