Spring-Aspects 工件中的 aop.xml 文件是什么?

问题描述 投票:0回答:1

我为我的应用程序激活了aspectj加载时间编织,并添加了定义我的方面的aop.xml文件。

我发现我的类路径上的 spring-aspects jar 也包含 aop.xml 文件,并且在我将应用程序配置为以spectjweaver.jar 作为 java 代理启动时加载。

看起来,当没有激活编织时,该文件未使用,但激活后确实增加了应用程序启动时间。这个文件有什么用?

java spring aspectj spring-aop spring-aspects
1个回答
0
投票

您正在谈论此文件。引用其内容,稍微重新格式化:

<?xml version="1.0"?>
<!-- AspectJ load-time weaving config file to install common Spring aspects. -->
<aspectj>
  <!--<weaver options="-showWeaveInfo"/>-->
  <aspects>
    <aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/>
    <aspect name="org.springframework.scheduling.aspectj.AnnotationAsyncExecutionAspect"/>
    <aspect name="org.springframework.transaction.aspectj.AnnotationTransactionAspect"/>
    <aspect name="org.springframework.transaction.aspectj.JtaAnnotationTransactionAspect"/>
    <aspect name="org.springframework.cache.aspectj.AnnotationCacheAspect"/>
    <aspect name="org.springframework.cache.aspectj.JCacheCacheAspect"/>
  </aspects>
</aspectj>

首先,说到

spring-aspects
,你需要明白它使用的是原生的AspectJ,而不是基于代理的Spring AOP。用于编织方面的技术称为加载时编织(LTW),即目标类字节代码在类加载期间由编织代理进行转换,该代理通常添加到 JVM 命令行,如下所示:

java ... -javaagent:/my/aspectjweaver.jar -javaagent:/my/spring-aspects.jar

你看,你可以同时使用单个甚至多个代理。这是一种通用的、标准化的 JVM 机制。 AspectJ 只是碰巧使用它,就像许多其他 Java 代理一样。

Spring手册中有一个章节,描述了如何在Spring中使用原生AspectJ。有一个简短的段落涉及

aop.xml
,进一步指向相应的 AspectJ 手册章节

简而言之:

  • AspectJ LTW 是可配置的。您配置它的方式是一个
    aop.xml
    文件。
  • 因此,
  • spring-aspects
    带有自己的
    aop.xml
    文件。它列出了库中当前包含的六 (6) 个方面。
© www.soinside.com 2019 - 2024. All rights reserved.