当前位置: 首页 > 知识库问答 >
问题:

Spring AspectJ加载时间编织不适用于5.3.3和Tomcat 9.0.37

高晋
2023-03-14

我参与了一个较老项目的审查任务。任务是将某些库更新到更新的版本。这个项目成功地使用了spring(4.3.14.Release),以及JDK 8下的AspectJ(1.9.0)和Tomcat8.0.20。现在spring将更新到最新版本(目前为5.3.3),Tomcat版本也将提升到最新版本(目前为9.0.37)。服务器应该在JDK11下运行。升级库后,我们意识到AspectJ不再工作了。所以我开始调试这个。AspectJ是从如下所示的XML配置中激活的:

<context:load-time-weaver />

在调试容器的启动时,a在org.springframework.context.config.LoadTimeWeaverBeanDefinitionParser中偶然发现了这段代码:

protected boolean isAspectJWeavingEnabled(String value, ParserContext parserContext) {
    if ("on".equals(value)) {
        return true;
    }
    else if ("off".equals(value)) {
        return false;
    }
    else {
        // Determine default...
        ClassLoader cl = parserContext.getReaderContext().getBeanClassLoader();
        return (cl != null && cl.getResource(AspectJWeavingEnabler.ASPECTJ_AOP_XML_RESOURCE) != null);
    }
}

有人在让AspectJ以这种方式工作时遇到过类似的问题吗?在我看来,问题在于检测类路径上的aop.xml文件。

编辑:我使用JDK和Tomcat版本的不同组合做了一些更多的研究。问题与这两者无关。当一个版本一个版本地升级spring版本时,我发现它一直工作到5.1.20版本。从5.2.0开始。释放我的问题开始。同时,我激活了AspectJ日志记录,所以我可以看到一些类被编织了,但大多数我希望被编织的类没有被编织。

共有1个答案

支嘉祥
2023-03-14

这是由spring框架自5.2.0版本以来的回归造成的。这就是问题所在。

 类似资料:
  • 每当打开Hibernate会话时,我都想使用AsheJ添加一个过滤器。我创建了一个方面并为我自己的类测试了它,它起作用了,但是对于Hibernate会话它什么也不做。 我创建了一个META-INF/aop。资源中的xml: 当我开始我的程序时,我得到以下异常: 我遵循了这些教程: 教程1教程2 我发现我必须按照异常的指示传递JVM参数,所以我尝试在构建梯度中执行以下操作: 根据IntelliJ,a

  • 和位于同一个包中,编织工作在直接实例化的包上,而不是bean返回的包上。 我搜索了Spring AOP文档,但似乎找不到任何与此相关的内容。对于自动代理,您需要做一些魔术,对于SpringAOP也需要做一些限制,但是加载时间编织就我所知应该可以工作--例如,我已经尝试过私有方法,它可以工作。

  • 但我的问题是,如果它不使用AspectJ进行编织,那么Spring AOP是否有自己的编织,它是在加载时还是编译时执行? 我的Spring配置XML文件的相关部分是:

  • 如果我使用的是基于AspectJ的Spring AOP,那么我是否需要配置我的方面来使用加载时间编织?或者Spring AOP在使用基于AspectJ的方法时也支持运行时/编译时编织吗?

  • 问题内容: 我在Spring Framework应用程序中将Hibernate用作JPA提供程序(我使用其代替其)。我设法让Spring Framework的加载时间编织支持起作用,所以我克服了这个障碍。 我需要在实体上启用和属性的延迟加载。我了解如何使用Hibernate的ant任务在 构建 时对我的实体进行检测(编织),但是我想改为在 运行时 (加载时编织)对我的实体进行检测。我已经在多个Go