问题标签 [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 投票
2 回答
573 浏览

java - 如何使 Loadtime-AspectJ 在小程序中工作

由于 AspectJ LoadTime-Weaving 需要使用代理/它自己的类加载器加载 JVM - 有没有办法从我的小程序加载/更改用户的 JVM?或者可能就在加载小程序之前(使用父小程序?)

0 投票
3 回答
5238 浏览

spring - Spring 依赖注入注解的切面

使用 Spring 我在对带注释的 Aspect 类进行依赖注入时遇到了一些问题。CacheService 是在 Spring 上下文启动时注入的,但是当编织发生时,它说 cacheService 为空。所以我不得不手动重新查找 spring 上下文并从那里获取 bean。还有另一种方法吗?

这是我的方面的一个例子:

0 投票
2 回答
7527 浏览

spring - 使用 Tomcat 和 Spring 配置 AspectJ LTW 时遇到问题

我在我的 Tomcat 6 webapp 中让加载时编织与 Spring 一起工作时遇到了一些问题。我只想将它用于事务(以便自调用尊重事务注释,而 AOP 代理不这样做)。似乎正在加载编织器,但实际上并没有编织我的带注释的类。当我单步执行我的代码时,我在 SQL 日志中看不到任何事务边界,正如我在使用常规 AOP 代理配置时看到的那样。这是我的设置:

在 server.xml 中:

我有 spring-tomcat-weaver.jar tomcat/lib 目录,以及我的 Tomcat 类路径中的以下 jar:

tomcat/webapps/API/ROOT/WEB-INF/lib/aspectjweaver.jar tomcat/webapps/API/ROOT/WEB-INF/lib/spring-aspects.jar

这是在定义带注释的服务类的 bean 配置文件中:

在我的上下文中的许多其他 bean 配置文件之一中:

我希望 MethodTimer 使用常规 AOP 代理,而不是 LTW - LTW 应该只适用于 @Transactional 注释。如此处所述:http: //static.springsource.org/spring/docs/2.5.x/reference/aop.html#aop-aj-configure。如果我注释掉<aop:aspectj-autoproxy>元素,我不会收到任何我看到的编织信息日志消息。说到这里,他们来了;您可以看到方面正在加载,但实际上没有编织任何内容:

从日志可以看出,我没有自己的aop.xml文件,我使用的是spring-aspects.jar中默认的,如下:

我不需要用 启动Tomcat -javaagent:/path/to/spring-agent.jar,对吗?因为我在 server.xml 中指定了正确的 ClassLoader 并且看到加载器被使用。我错了吗?我在任何地方都需要 spring-agent.jar,无论是在 tomcat/lib 还是我的 tomcat 类路径中?我需要在 tomcat/lib 中的 aspectjweaver.jar 吗?我还缺少什么?任何帮助将不胜感激,因为我已经为此苦苦挣扎了将近两天。

编辑:我省略的另一个(也许非常重要)细节 - 我正在 Eclipse 中开发并使用 Sysdeo Tomcat 插件来启动 Tomcat。将尝试从命令行启动 Tomcat,看看是否有所不同......

0 投票
1 回答
3640 浏览

java - 使用 aop.xml 在 AspectJ 中加载时间编织

据我了解,要使用 aop.xml 文件进行加载时间编织,它必须放在 META-INF 中。有没有办法解决这个问题并在任何目录中使用 aop.xml (或任何 xml 文件)?谢谢。

0 投票
2 回答
4269 浏览

spring - aop.xml 名称和位置?

有没有办法用 LTW 指定 aop.xml 文件的名称?或定义另一个名称和位置?我有几个我使用的软件模块,它们都使用具有不同设置的 META-INF/aop.xml。我将这些模块包含在一个 Web 应用程序中,然后这一切都取决于它是如何部署/解包的,使用哪个 aop.xml 文件。所以经过长时间的搜索,我发现并非所有的 LTW 编织都会发生纠正,因为它取决于 aop。使用了xml...

基本上我需要使用两个 aop.xml 文件,有点合并 aop.xml 文件的两个内容......

这个怎么做?埃德

0 投票
1 回答
1025 浏览

java - 签名 jar 的 AspectJ 加载时编织

有人成功使用带有签名罐子的 AspectJ 加载时间编织吗?

我遇到了一个异常,不知道如何修复它(使用 AspectJ 1.6.8-16.10 测试):

坦率地说,我不确定这在技术上是否可行,但我知道 Hibernate 项目(即使用 Javassist 而不是 CGLIB)完成了类似的问题(使用从签名的 java 类动态生成的 java 代码)。详情在这里

0 投票
1 回答
1125 浏览

spring - 如何在 JBoss 6 和 Spring 3 中为 AspectJ 使用加载时间编织器?

我尝试使用 AspectJ、Spring 3 和 JBoss 6 并遇到了加载时间编织根本不起作用的问题。创建小样本表明具有简单 bean 和简单方面的相同 war 文件在 JBoss 5.1 上运行良好,但在 JBoss 6 中根本不会触发 LTW。

更新:我在 Spring bugtracker 上打开了一个问题 -> https://jira.springsource.org/browse/SPR-7887

0 投票
1 回答
14343 浏览

aspectj - AspectJ - 编译时与加载时编织

我无法理解 aspectJ 的编译时和加载时编织以及弄清楚使用什么(以及如何使用 ajc)来编译和构建我的项目。

这是我的项目结构:-

  • TestProject:一个ja​​va服务库。其他一些项目正在使用它。该项目不包含任何方面。

  • TestProject-Aspects :仅包含
    为 TestProject 中的一些类提供建议的方面。我没有使用
    AspectJ5 注释样式,并且我所有的连接点目前都只是在方法
    执行中。

我的问题:

  • ajc vs iajc,它们有什么不同?
  • 有编织的必要吗?

  • 这样的事情会起作用吗?

编译TestProject-Aspects

编译测试项目

  • 我根本不需要使用 javac 吗?我最初用来编译TestProject?
0 投票
3 回答
5367 浏览

spring - 使用 Spring/Jetty(或 Tomcat)/Maven 为 REST 测试配置集成测试

我想用 HTTP 请求测试我们的 REST 服务(有点黑盒测试)。但是,经过几个小时的谷歌搜索并尝试了不同的配置,我仍然无法正确启动 Jetty。这是我当前的配置(我尝试了多个不同的版本):

pom.xml

orm.xml

现在,我得到了例外:

  • java.lang.IllegalStateException: ClassLoader [org.mortbay.jetty.webapp.WebAppClassLoader] 不提供“addTransformer(ClassFileTransformer)”方法。指定自定义 LoadTimeWeaver 或使用 Spring 代理启动 Java 虚拟机:-javaagent:org.springframework.instrument.jar

我理解这个例外,但我无法修复它。我还尝试了其他几种方法,例如通过 MAVEN_OPTS 提供 javaagent 或尝试将 VM args 设置为 Jetty。问题是谷歌针对不同版本返回了一堆“解决方案”,但没有一个有效。

我目前非常沮丧的是,像进行 REST 服务测试这样的常见场景在 Spring 中很难实现。因此,如果您足够聪明地找到正确的配置,请以即使猴子也能配置它的方式与我分享,我保证如果我们遇到啤酒就在我身上。

以下是我使用的版本:

Maven 2.21

如果需要,我很乐意提供更多信息。就像我说的每一个帮助表示赞赏。

0 投票
1 回答
1030 浏览

java - 以其他方式指定 -javaagent

我正在尝试使用以下方式启动我的 Web 应用程序:

我已经嵌入了 Jetty 并使用了一个 maven 程序集来构建所需的 jar,这一切都很完美,但是我刚刚意识到我需要带有 AspectJ 的 LTW。通常,当应用程序部署在应用服务器中时,-javaagent:aspectjweaver.jar 会添加到应用服务器启动中。我不希望我的应用程序的干净启动行变成:

那么有没有另一种方法可以让我在不诉诸于此的情况下启动 Aspectj LTW?