我有一个库(比如lib1),它包含几个方面类(比如aspect1.java和aspect2.java)。 我想在我的服务代码中只编织aspect1.java。 在编译时编织中使用ant iajc目标是否可行? 我知道在加载时间编织中可以通过指定在aop.xml中编织哪些方面来实现。
我们在iajc中也有aspectpath,但我不知道如何配置它来接受单个类文件而不是完整的jar文件。
<target name="weave-with-ajc">
<ht-aj:standard-aj-weave>
<inpath>
<path path="${classes.dir}" />
</inpath>
<aspectpath>
<path path="${standard.compile.classpath}" />
<path path="${bp:[Library]pkg.classpath}" />
</aspectpath>
</ht-aj:standard-aj-weave>
</target>
我只想编织特定的方面,而不是编辑库中的所有方面。请建议。
答案 0 :(得分:0)
为编译时编织以及https://bugs.eclipse.org/bugs/show_bug.cgi?id=124460
添加了aop.xml支持答案 1 :(得分:0)
尽管mentioned enhancement仍未实现,但他们提供了一种简单的方法来明确指定要在编译时编辑的方面。在我的例子中,我使用spring-aspects编织AnnotationBeanConfigurerAspect
以支持@Configurable
注释,问题是编织在spring-aspects中找到的所有方面。 jar(@Transactional
支持,JPA异常翻译等)这不是我想要的(至少我想控制它)。基于this帖子,我使用以下解决方案:
<iajc destDir="${module.bin.dir}" showWeaveInfo="true" >
<inpath>
<pathelement location="${module.bin.dir}" />
</inpath>
<classpath>
<path refid="module.classpath" />
</classpath>
<aspectpath refid="module.classpath" />
<inxml> <!-- this is the important part -->
<fileset dir="${module.src.dir}">
<include name="aop-ctw.xml"/>
</fileset>
</inxml>
</iajc>
aop-ctw.xml
驻留在源目录中:
<?xml version="1.0"?>
<aspectj>
<aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/>
<!-- Now, I don't want these:
<aspect name="org.springframework.transaction.aspectj.AnnotationTransactionAspect"/>
<aspect name="org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect"/>
-->
</aspectj>
如果找不到aop-ctw.xml
,iajc
符合标准行为:编织所有可用方面。