2016-08-15 69 views
1

我有一个库(称为lib1),它包含一些方面类(比如aspect1.java和aspect2.java)。 我想在我的服务代码中只编织aspect1.java。 在编译时编织中使用ant iajc目标是否可能? 我知道这可以通过指定在aop.xml中编织哪些方面来加载时织入。iajc使用方面路径编织特定方面

我们在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

即使mentionedenhancement仍然没有实现,他们已经提供了一个简单的方法来显式地指定方面编译织-时间。在我的情况下,我使用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去与标准的行为:所有可用方面编织而成。