Spring 的 LoadTimeWeaver 代理未启动

2024-03-24

我正在尝试使用 Spring 和 AspectJ 实现加载时编织。据我所知,我已正确配置所有内容,但当我尝试运行集成测试时,我不断收到错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.weaving.AspectJWeavingEnabler#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:643)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.boku.risk.service.perisistence.PersistenceTestBase.setupBase(PersistenceTestBase.java:23)
    at com.boku.risk.service.dao.CountryLimitDaoTest.setup(CountryLimitDaoTest.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.context.weaving.LoadTimeWeaverAwareProcessor.postProcessBeforeInitialization(LoadTimeWeaverAwareProcessor.java:95)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1413)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    ... 37 more
Caused by: java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
    at org.springframework.context.weaving.DefaultContextLoadTimeWeaver.setBeanClassLoader(DefaultContextLoadTimeWeaver.java:83)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1436)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1408)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    ... 46 more

我的应用程序上下文包含:

<context:load-time-weaver/>

我的 pom 包含:

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-agent</artifactId>
            <version>2.5.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.6.10</version>
        </dependency>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <forkMode>always</forkMode>
                    <argLine>
                        -javaagent:${settings.localRepository}/org/springframework/spring-agent/2.5.6/spring-agent-2.5.6.jar
                    </argLine>
                </configuration>
            </plugin>
        </plugins>
    </build>

看起来好像无法弄清楚加载弹簧代理,但我似乎无法弄清楚其原因。在此先感谢您的帮助。


尝试声明 Instrumentation LoadTimeWeaver bean,而不是显式使用 -javaagent:/path/to/org.springframework.instrument-{version}.jar。根据文档

要使用它,您必须通过提供以下 JVM 选项来使用 Spring 代理启动虚拟机:

-javaagent:/path/to/org.springframework.instrument-{版本}.jar

请注意,这需要修改虚拟机启动脚本,这可能会阻止您在应用程序服务器环境中使用它(取决于您的操作策略)。此外,JDK 代理将检测整个虚拟机,这可能会很昂贵。

我希望按照下面的方式进行 -这里解释了 https://github.com/invesdwin/invesdwin-instrument- 我想会更好。

@Bean
public InstrumentationLoadTimeWeaver loadTimeWeaver()  throws Throwable {
InstrumentationLoadTimeWeaver loadTimeWeaver = new InstrumentationLoadTimeWeaver();
return loadTimeWeaver;
}

同样可以在xml https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch14s06.html配置。

发现了一个新的library https://github.com/subes/invesdwin-instrument这只是解决动态设置 spring InstrumentationLoadTimeWeaver 以启用对方面的支持,而无需使用显式 java 代理启动 JVM

<dependencies>
    <dependency>
        <groupId>de.invesdwin</groupId>
        <artifactId>invesdwin-instrument</artifactId>
        <version>1.0.9</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>invesdwin</id>
        <url>https://invesdwin.de/artifactory/invesdwin-oss-remote</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
</repositories>

春季启动配置

@SpringBootApplication
/** 
 * Make @Configurable work via @EnableLoadTimeWeaving.
 * If it does not work, alternatively you can try: 
 * @ImportResource(locations = "classpath:/META-INF/ctx.spring.weaving.xml") 
 */
@EnableLoadTimeWeaving
public class MySpringBootApplication {
    public static void main(final String[] args) {
        DynamicInstrumentationLoader.waitForInitialized(); //dynamically attach java agent to jvm if not already present
        DynamicInstrumentationLoader.initLoadTimeWeavingContext(); //weave all classes before they are loaded as beans
        SpringApplication.run(MySpringBootApplication.class, args); //start application, load some classes
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring 的 LoadTimeWeaver 代理未启动 的相关文章

随机推荐

  • 带有嵌套 JSON 的 React/Redux mapStateToProps

    我有一个正在解析 JSON 的 redux 组件 在底部 但我不知道如何获取嵌套的子对象 我认为我没有正确理解 mapStateToProps 的工作原理 控制台日志正在转储子对象 但是当我尝试访问 services name 时 我得到
  • Android 数据库陌生列表列

    我在读取 Android SQLite 数据库中的列的两种方法之间得到不一致的结果 首先 这是根据此处接受的答案的数据库升级例程的一部分 将 SQLite 数据库从一个版本升级到另一版本 https stackoverflow com qu
  • CMake add_subdirectory()

    介绍 我正在尝试使用 CMake 来获取跨平台编译脚本 适用于 Windows32 上的 VS 9 0 和 Unix 上的 Makefiles 我遇到了关于 add subdirectory 的一些我无法理解的事情 让我向你展示我的代码 C
  • React Native - 剪贴板中更改的监听器

    有没有办法在 React Native 中添加剪贴板数据更改的侦听器 基本上取决于用户是否在剪贴板中复制了某些内容 无论是在应用程序内部还是在后台应用程序 我想执行一些方法 React Native 没有为您提供监听此类事件的方法 但您有两
  • View 无法锚定到父 CoordinatorLayout

    我刚刚将 appcompat 库从 23 1 1 更新到 23 2 现在应用程序停止处理 java lang IllegalStateException 视图无法锚定到父 CoordinatorLayout java lang Illega
  • 在 Swift 中将字典转换为 JSON

    我已经创建了下一个词典 var postJSON ids 0 answersArray 0 ids 1 answersArray 1 ids 2 answersArray 2 as Dictionary 我得到 2 B 1 A 3 C 那么
  • Angular 1 - 获取当前URL参数

    我想从当前 URL 中提取数据并在控制器中使用它 例如我有这个网址 app dev backend surveys 2 我想要提取的位 应用程序 dev 后端 type id Angular 中有什么可以帮助我完成这项任务吗 从 URL 获
  • Highcharts 日期时间本地化

    有人可以告诉我如何本地化在 HighCharts js 文件中硬编码的日期相关字符串吗 例如 我希望图表显示本地化值 F v 而不是 x 轴中默认的 二月 日期标签 我尝试在实例化图表之前通过在语言对象上设置选项来实现本地化 Highcha
  • 数据透视表 SQL 中的水平总计

    我有这个查询工作 select cap idPlanoContasFin 3684 2234 2 from select cap idPlanoContasFin cap idempresa sum cap valorfatura as S
  • 为什么验证不是 Monad?

    一个示例用例 def div2 i Int Validation String Int if i 2 0 Validation success i 2 else Validation failure odd def div4 i Int f
  • Autowired 在自定义约束验证器中给出 Null 值

    我对 Spring 完全陌生 我已经针对所提出的问题查看了一些答案 以下是链接 Spring 3 1 自动装配在自定义约束验证器中不起作用 https stackoverflow com questions 12676299 spring
  • 如何在 Laravel 5.6 中创建自定义 404 页面?

    我还没有找到任何教程来解决如何在这个特定版本的 Laravel 5 6 中 正确 创建 404 页面 我发现一些过时的内容与 Laravel 5 6 的工作方式有点不同 任何输入都会有帮助 我通过阅读 Laravel 文档 自定义 HTTP
  • TypeORM 不支持实体装饰器上的数据库设置

    我试图将我的 TypeORM 项目分离到多个数据库上 因为它的规模不断增长 并且它的组件非常离散 但相互关联 所以我需要能够跨数据库建立关系 我正在尝试使用database设置在 Entity装饰器 如下所述 https typeorm i
  • 在 Elixir 中部署时更改后端/模块?

    如何实现一个可替换的后端 或基本上任何部分或模块 以便可以在 Elixir 中的配置 部署时进行替换 我的具体情况是一个简单的网络应用程序 在本例中使用 Phoenix 但我猜这个问题也适用于其他情况 我有一个非常简单的后端 使用Agent
  • 从 iPhone 上的我的应用程序调用官方 *设置* 应用程序

    在我的应用程序中的某一时刻 我想将用户重定向到官方Settings应用程序 如果可以的话我也想直接去Network内的部分Settings app 我想我需要的是Settings应用程序的 url 方案和构建我的请求的格式 但我怀疑调用这样
  • WebActivatorEx 与 OwinStartup

    例如 在 Web API 应用程序中 有什么区别 assembly OwinStartup typeof MyClass MyMethod and assembly WebActivatorEx PreApplicationStartMet
  • 当下载发生在新选项卡中时,如何在 Selenium (Java) 中无头下载文件?

    我有一个网页 当我单击按钮时 它会打开另一个选项卡 然后在其中几秒钟后下载 csv 文件 我试图无头自动化 但我无法做到这一点 我正在使用下面的代码 但我认为以下解决方案适用于在同一窗口中进行下载 我如何调整它以适合我的情况 代码工作正常
  • 如何使用 bluez API 扫描低功耗蓝牙设备

    我是使用 BlueZ 进行低功耗蓝牙编程的新手 我想开发一个本机代码 c 来使用 BlueZ API 在 Android 4 0 3 下扫描附近的低功耗蓝牙设备 有人知道我应该使用哪些 BlueZ 方法吗 如果您想编写本机 C 代码来扫描
  • Drupal 7:如何更改图像字段小部件“alt”或标题“标签

    我正在尝试更改节点添加表单上的图像小部件中的 alt 和 标题 标签 我已经尝试过这两个钩子 hook field widget form alter hook form alter 我无法找到需要去哪里才能成功更改标签 有人可以指导我找到
  • Spring 的 LoadTimeWeaver 代理未启动

    我正在尝试使用 Spring 和 AspectJ 实现加载时编织 据我所知 我已正确配置所有内容 但当我尝试运行集成测试时 我不断收到错误 org springframework beans factory BeanCreationExce