每当打开Hibernate会话时,我都想使用AsheJ添加一个过滤器。我创建了一个方面并为我自己的类测试了它,它起作用了,但是对于Hibernate会话它什么也不做。
我创建了一个META-INF/aop。资源中的xml:
<aspectj>
<weaver options="-Xreweavable -verbose -showWeaveInfo">
<include within="immo.api.config.multitenancy.TestAspect"/>
<include within="org.hibernate.internal.SessionFactoryImpl.SessionBuilderImpl"/>
</weaver>
<aspects>
<aspect name="immo.api.config.multitenancy.TestAspect"/>
</aspects>
当我开始我的程序时,我得到以下异常:
... Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:spring-instrument-{version}.jar
我遵循了这些教程:
教程1教程2
我发现我必须按照异常的指示传递JVM参数,所以我尝试在构建梯度中执行以下操作:
apply plugin: 'application'
applicationDefaultJvmArgs = ["-javaagent:spring-instrument.jar", "-javaagent:aspectjweaver.jar"]
根据IntelliJ,applicationDefaultJvmrgs从未使用过,我仍然会遇到同样的异常。
那么有谁能帮我在gradle正确通过JvmArgs吗?或者,更好的是,告诉我如何使用自定义LoadTimeWeaver完成工作?
提前感谢!
编辑:
也许还不清楚。问题是aop。xml从未使用过,我只需要知道如何告诉jvm将javaagent与gradle一起使用
我找到了解决我的
https://guypaddock.github.io/posts/aspectj-native-syntax-with-spring-ltw-and-gradle/
这种方法解决了我的问题。
但我的问题是,如果它不使用AspectJ进行编织,那么Spring AOP是否有自己的编织,它是在加载时还是编译时执行? 我的Spring配置XML文件的相关部分是:
如果我使用的是基于AspectJ的Spring AOP,那么我是否需要配置我的方面来使用加载时间编织?或者Spring AOP在使用基于AspectJ的方法时也支持运行时/编译时编织吗?
但还是毫无头绪。
和位于同一个包中,编织工作在直接实例化的包上,而不是bean返回的包上。 我搜索了Spring AOP文档,但似乎找不到任何与此相关的内容。对于自动代理,您需要做一些魔术,对于SpringAOP也需要做一些限制,但是加载时间编织就我所知应该可以工作--例如,我已经尝试过私有方法,它可以工作。
3.14 注册一个加载时编织器 {#toc_16} 在类被加载进JVM时Spring使用LoadTimeWeaver进行动态转换。 为了使的load-time weaving可用,那么你只需在配置了@Configuration的类上添加@EnableLoadTimeWeaving。 @Configuration @EnableLoadTimeWeaving public class AppConf