问题标签 [load-time-weaving]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1129 浏览

eclipse - 有没有办法在不使用 jvm 代理的情况下使用 Spring AspectJ LTW 运行 JUnit 4 测试?

我有一个配置了 aspectJ LTW 的 spring tomcat 项目,我想用 AspectJ LTW 运行单元测试。根据使用 LTW 为独立 JVM 运行的 spring 文档,需要为 JVM 代理传递参数。

将 JVM 代理传递给 junit 测试在 ant 中很容易做到,但在 eclipse 中运行单元测试时非常不方便。有没有办法配置 JUnit 类,以便在不使用代理的情况下打开 LTW?

对于tomcat spring使用转换类加载器来加载运行AspectJ LTW,JUnit是否有类似的东西,也许是执行LTW的JUnit runner?

更新:通过告诉 eclipse 将 .launch 文件存储在 eclipse 项目中,我可以右键单击单元测试并执行 Run As 并且它可以工作,因为 eclipse 使用 .launch 文件,这是我想避免的解决方法可能的。

0 投票
2 回答
806 浏览

java - AspectJ 和 Spring LTW 在向上转换时不起作用

我用 AspectJ 设置了 LTW,并且很快就成功了。这是设置:bean.xml:

我的服务将自动连接到一个类:

父类:

可配置类,自动装配服务并扩展 Bar。

并且只是一个引用了父类 Bar 的类:

和一个成功的测试用例。它只是创建一个 BarExtended 实例并检查 LTW 是否工作。Foo 类什么都不做。

此测试以绿色运行。但以下测试失败:

我只是插入将 BarExtended 类设置为 Foo 的行。沮丧使 AspjectJ 无法正常工作。

顺便说一句,当我将 Foo 类更改为使用 BarExtended 类时(因此不需要向上转换):

上述测试将起作用。有谁知道为什么 AspjectJ 在向上转换可配置对象时表现得如此奇怪?

编辑:Folwing 也失败了:

一个不同的 BarExtended 对象被设置为 Foo 并且第一个 barExtended 对象被 AspectJ 忽略。但是使用反射来实例化 BarExtended 作品:

奇怪,不是吗?

非常感谢

问候,

安德烈亚斯

0 投票
0 回答
1134 浏览

java - 带有“第二个”aop.xml 文件的 AspectJ LTW

我最近开始使用AspectJ LTW。我将 Eclipse 与AJDT一起使用。我基本上使用“outjar”选项来使用已编译的 .aj 文件创建我的“AspectJ 库(.jar 文件)”。

下一步是在“普通”Eclipse Java 项目中使用这个 jar 文件,如果我在 javaagent 路径上有 aspectjweaver.jar 库,它就可以完美运行:

我的下一个目标是在这个“普通”java 项目中使用第二个 aop.xml 文件。META-INF/aop.xml如果文件位于类加载器搜索路径上,即使这样也能很好地工作。现在我发现了这一点:

http://www.eclipse.org/aspectj/doc/released/README-1612.html

(向下滚动到“aop.xml 中更灵活的切入点/代码连接”)

以下 XML 规范可以正常工作:

但我真正感兴趣的是将我自己的参数/变量/消息“传递”给方法someMethod。就像是:

那么有没有办法将字符串(例如)传递给方法someMethod?或者还有其他可用的选项吗?

0 投票
2 回答
15870 浏览

java - 如何使用 AspectJ 和 Tomcat 配置加载时编织?

我尝试以以下方式配置加载时编织(用于使用 Perf4J 进行分析):

1)我添加aop.xmlMETA-INF文件夹。部署时,META-INF 被放置在工件根目录(即MyAppDeployed/META-INF)中。

2)我把aspectjrt-1.6.1.jar, aspectjweaver-1.6.1.jar, commons-jexl-1.1.jar,commons-logging.jar放到Tomcat/lib文件夹中(起初我尝试过MyAppDeployed/WEB-INF/libs,但也没有用)。

3)我-javaagent:C:\apache-tomcat-6.0.33\lib\aspectjweaver-1.6.1.jar在启动Tomcat时添加了VM选项。

4)我的aop.xml

我没有看到任何迹象表明加载时编织发生了。既没有错误报告也没有必要的结果。我唯一的错误信息是:

以防我aspectjweaver-1.6.1.jar在指定 javaagent 参数时名称错误。如果正确写入 - 不会打印错误消息。

任何想法,我做错了什么?

PS我使用Java 5,我用1.5.4aspectj的版本尝试了同样的事情,结果完全相同。

0 投票
4 回答
6776 浏览

java - 为什么Spring @Value 与@Controller 不兼容?

我正在寻找对这个问题的更好理解。一种解决方法非常简单,即将配置数据移动到另一个没有代理/建议的类,但我认为更好地理解这一点将有助于我将来避免其他相关问题,所以我想要任何解释可以提供。

我将 Spring 3.1.0.RELEASE 与 Spring STS 和 vFabric tc 服务器一起使用。使用 @Controller 类实现了一个基本的小型 REST 服务器。这一切都很好(确实如此),但@Controller 也是@Transactional,在它与加载时间编织和 vFabric tc 服务器之间,它破坏了@Value。

还有一个属性文件 app.properties:

这在 JUnit 下运行良好,测试获得了一个将 prop 设置为“SUCCESS”的 MyAPI 对象。但是当应用程序被加载到 vFabric 中时,我猜它会获得加载时间编织和代理。无论发生什么,都会创建两个 MyAPI 实例,一个具有 prop == "SUCCESS",另一个(不幸的是,它是处理 http 请求的那个)具有 prop == "${my.prop}"。

所以总而言之,我称之为魔法失败,这是我使用 AOP 之类的东西时最关心的问题。即使使用 STS,我也不知道如何找出问题背后的原因或弄清楚这是否是一个严重的错误。如果是 bug,我不知道是 Spring、AspectJ、load-time weaver 还是 vFabric 中的 bug,所以我什至不知道在哪里提交 bug 报告。

因此,对于理解这一点的任何帮助将不胜感激。谢谢。

0 投票
1 回答
1876 浏览

java - 如何解释我的堆栈跟踪?

我使用 IBM RAD 8 并部署到 websphere,然后我得到了这个堆栈跟踪:

这是什么意思?我应该采取哪些步骤来解决错误?

谢谢你的帮助

0 投票
2 回答
17111 浏览

tomcat - 如何使 Tomcat 与 META-INF/context.xml 中定义的 TomcatInstrumentableClassLoader 以及 WEB-INF/lib/spring-instrument-tomcat.jar 一起工作

我构建了一个简单的应用程序,它在服务器端使用 Spring Data 3.1.0.RELEASE 和 Eclipselink 2.4 - 它托管在 Tomcat 7.0.27 中。在 mywebapp/META-INF/context.xml 我有 Spring 类加载器

如果我放入spring-instrument-tomcat.jar$TOMCAT_HOME/lib则 Tomcat 运行 mywebapp 很好,但如果我放入spring-instrument-tomcat.jar- $TOMCAT_HOME/webapps/mywebapp/WEB-INF/libTomcat 异常死亡

上下文加载器参数useSystemClassLoaderAsParent设置为false也无济于事。

我不想在 Tomcat 中有任何(自定义)全局库(在我们的现实生产系统中拥有全局库并不容易),因此我试图简单地本地化所有需要的东西(但很大)战争文件。关于如何实现这种封装的任何想法?

0 投票
1 回答
989 浏览

tomcat - Spring框架Tomcat LoadTimeWeaving

我正在使用 tomcat 作为我的网络服务器,并且想对fetch = FetchType.lazy我的所有 @OneToOne 注释使用该注释,但是 spring 恢复了我的惰性设置给我 eclipselink 警告:

我必须对 tomcat 做什么才能使编织工作,以便我可以使用延迟获取,或者是否有任何其他替代延迟加载关系的方法。我遇到了巨大的性能问题?

我现在正在尝试添加加载时间编织,我已将 spring-instruments.jar 和 spring-aspects.jar 添加到我的 tomcat/lib 中,并且在将全局添加<context:load-time-weaver/>到我的 applicationContext.xml 文件后,我得到了一个

0 投票
1 回答
557 浏览

ant - OpenJPA 增强器或加载时编织器

我得到了这个例外。

我的 Ant 脚本中有一个增强器任务。

我看到我的类得到了增强,类文件的大小增加了,但我仍然得到上述异常。

0 投票
2 回答
15943 浏览

spring - 如何在没有接口的情况下使用加载时间编织配置 AspectJ

在我的项目中,我目前使用 AspectJ(由于某些限制而不仅仅是 Spring AOP)在编译时进行编织。为了加快 Eclipse 上的开发,我想在 Load Time 进行编织。我成功地做到了这一点,但有一个主要限制:为我的服务使用包含一些事务方法的接口。如果我用它的实现而不是它的接口声明服务,在调用者类中,没有编织,因此不支持事务。

那么如果 AspectJ 支持它,如何配置 AspectJ with Load Time Weaving without Interface ?

我创建了一个重现该问题的小项目:

以下测试失败。

以下测试成功,如果:

  • 注入的服务是用它的接口而不是它的实现来声明的(即用“@Inject MyService 服务”替换“@Inject MyServiceImpl 服务”),测试成功。

  • 编织是在编译期间执行的(在这种情况下,配置、POM 和 Spring 应用程序上下文显然不同)。但我的目标是在加载时进行编织以避免每次保存 Java 文件时的编织阶段。

  • 使用 Spring AOP (tx:annotation-driven mode="proxy"),即基于代理的解决方案,代替 AspectJ。但是在这种情况下,我们遇到了自调用问题,即目标对象中的某个方法调用目标对象的其他方法,即使调用的方法带有@Transactional 标记,在运行时也不会导致实际事务。

aspectj-ltw/src/test/java/mycompany/aspectj_ltw/MyServiceImplTest.java

aspectj-ltw/src/main/java/mycompany/aspectj_ltw/MyService.java

aspectj-ltw/src/main/java/mycompany/aspectj_ltw/MyServiceImpl.java

aspectj-ltw/src/test/resources/META-INF/applicationContext.xml

aspectj-ltw/src/test/resources/META-INF/aop.xml

aspectj-ltw\pom.xml

运行测试的 VM 参数: