问题标签 [compile-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 回答
254 浏览

java - JPA - 编织的性能影响

我找不到任何基准或大规模测试来显示静态编织与动态编织的性能增益。有人有这方面的经验吗?

0 投票
0 回答
1137 浏览

spring - 在我的 Maven 项目中使用 aspectj 时的警告

我正在尝试在我的 Maven/Spring (3.2.11.RELEASE) 项目中使用切面。我已经为我的插件配置了这个……</p>

这是我的方面依赖项……</p>

但是当我运行“mvn clean install”时,我收到了这些警告……</p>

如何正确解决依赖关系以便这些警告消失?

编辑: 这是我在 spring WEB-INF/dispatcher-servlet.xml 文件中设置的配置。我正在尝试创建一个私有方法@Transactional ...

0 投票
0 回答
114 浏览

spring-mvc - 使用 servlet-和 portlet-context 在环境中注入依赖项的错误上下文

我目前正在开发一个应用程序,它既可以作为 portlet 也可以作为 servlet 访问(至少某些部分是)。我还使用 compile-time-weaving 将依赖项注入到原型范围内的 bean 中,例如通过“new”或更常见的通过 Hibernate 创建的 bean,如下所述:http: //www.chrissearle.org/节点/285 到目前为止,这工作正常,但是我现在使用的服务器 API 必须在 servlet 和 portlet 中以不同方式调用。所以我在我的应用程序中为服务创建了一个接口,并为该接口创建了两个实现,一个用于 servlet,一个用于 portlet,因此每个都可以不同地使用 server-api。每个实现仅在对应的 servlet/portlet-application-context 中配置。如果首先使用 servlet,则可以正常工作,注入并使用 servlet 的服务实现。然而,一旦使用了 portlet,只有 portlet 的服务实现将被注入和使用,用于 portlet 和 servlet。

我本来希望 servlet 和 portlet 的容器是分开的。这是一个错误还是 Spring 不支持,或者有没有办法修复或解决这个问题?该应用程序仍在使用 Spring 3.1.1,但当前版本 4.1.1 显示相同的行为。

我的配置看起来像这样(大大简化):

接口:我的服务:

Portlet 的 MyService 实现:

Servlet 的 MyService 实现:

Servlet 和 Portlet 使用的 Bean:

调用 Portlet 和 Servlet 控制器:

servlet-应用程序-context.xml:

portet-application-context.xml:

pom.xml 中的相关依赖项

编译时编织配置:

如果按顺序调用 servlet、portlet、servlet,则记录输出:

2014-11-27 更新:我现在创建了一个概述问题的测试用例:

https://github.com/ChrZae/servlet-portlet-spring-container-issue

0 投票
2 回答
1564 浏览

spring - @Configurable 不适用于在 @PostConstruct 方法中初始化的对象

我通过编译时编织将 Spring 与 AspectJ 一起使用,以对非容器管理的对象使用 @Configurable spring 注释。

这是一个示例 @Configurable-annotated 对象:

我注入此对象的组件:

当我在创建上下文后创建 TestConfigurable 时,TestComponent 注入那里很好,但是当我从 @PostConstruct-annotated 方法这样做时,它不会发生自动装配。

带有@PostConstruct 的组件:

我正在执行的应用程序:

这是此应用程序生成的输出:

那么是否有任何解决方法可以将依赖项注入到在 @PostConstruct 方法中创建的 @Configurable 对象中?所有 @Component 注释的 bean 都已经在上下文中,并且在调用 @PostConstruct 时已经及时为它们完成了自动装配。为什么 Spring 不在这里进行自动装配?

如果它们有助于解决问题,可以发布其他配置文件(上下文和 pom.xml)。

更新 1: 看起来我找到了问题的原因。使用 @Configurable 注解的对象由实现 BeanFactoryAware 的 AnnotationBeanConfigurerAspect 初始化。这个方面使用 BeanFactory 来初始化 bean。看起来 TestPostConstruct 对象的 @PostConstruct 方法是在 BeanFactory 设置为 AnnotationBeanConfigurerAspect 之前执行的。如果记录器设置为调试,则将以下消息打印到控制台:“BeanFactory 尚未设置...:确保此配置器在 Spring 容器中运行。无法配置类型 [...] 的 bean。继续进行而不注入。 "

是否有任何解决方法的问题仍然对我开放......

0 投票
0 回答
418 浏览

grails - Spring AOP - 记录器的切入点。@Before 不触发记录器

我是 Spring AOP 的新手。

当我的应用程序抛出异常时,我已经为我的应用程序中的所有方法编写了方面建议。(我已经用 grails 尝试过。)

异常服务.groovy

资源.groovy

allActionAdvice()在这里,它适用于应用程序内部发生的所有异常。但它不适用于log.error(logErrorActionAdvice()).

我在谷歌上对其进行了研究,它表明问题在于 AOP 和第三方依赖,如编织。所以,我需要做方面编织(编译时编织)。但我没有找到任何好的例子。

我需要对我的 Grails 应用程序进行哪些更改以使用我的方面的编译时编织,或者我还需要做些什么?

0 投票
2 回答
1466 浏览

java - 使用加载时编织时未编织超类中的@Transactional

我正在从事的项目与DAOs下面的项目具有类似的结构:

到目前为止,该项目使用编译时编织,但配置已更改为使用<context:load-time-weaver/>with -javaagent:/opt/tomcat7-1/lib/spring-instrument.jar

由于已应用此更改,因此不再编织JpaBase' 和GenericDao'注释。@Transactional每次服务类调用对象的persist方法时PersonDao,都不会启动事务。

值得注意的是:

  • 这在过去使用编译时编织时可以工作。
  • 中定义的所有方法都PersonDao正确编织,但继承的方法(例如persist(Object entity))未编织。

编译时间编织和加载时间编织应该做同样的事情,只是在不同的时刻。为什么编织行为发生了变化?

0 投票
0 回答
124 浏览

jpa - @Configurable 在 SpringBoot 应用程序中无法识别

我正在尝试为我的 Spring Boot 应用程序编写一个自定义的 JPA-EntityListener,它以某种方式感知应用程序上下文。在阅读文档以了解如何实现这一点时,我偶然发现了 spring-data 附带的 AuditingEntityListener 和此侦听器中也使用的 @Configurable Annotation,它启用了不受 spring 管理的对象的配置。所以我尝试在我自己的 Listener 中使用它,但无法识别注释。我已经阅读了有关该主题的文档和许多帖子,但其中一些似乎已经过时了。这就是为什么我在这里问:

在任何情况下我都必须为 LoadTimeWeaving 指定 spring-instrument.jar 吗?spring 文档说还有其他方法,也可以在应用程序上下文中配置它(每个类加载器?)。但是当我在没有在命令行上指定代理的情况下使用@EnableLoadTimeWeaving 启动我的应用程序时,我得到一个错误。

我想知道为什么即使在既没有指定 @EnableLoadTimeWeaving 也没有指定 @EnableSpringConfigured 的应用程序中也能在启动时识别 AuditingEntityListener。是因为分布式 spring-jars 已经用 CTW 编译了吗?

我也尝试过 CompileTimeWeaving 但这与 lombok 冲突。我从 2011 年开始找到了解决方案/解决方法,但这对我不起作用。有没有办法做到这一点?

LTW 和 CTW 的优缺点是什么,以及实现自定义 ApplicationContext-aware JPAEntityListener 的最佳方式是什么?

0 投票
1 回答
2481 浏览

gradle - AspectJ + Gradle + Lombok 不起作用

ANT 中有一个解决方案,但是我们如何使用 gradle 来实现呢?是否可以通过编译后编织来做到这一点。意思是用 lombok 编译以获取所有生成的 delombok 代码,然后在这个生成的 delombok 代码上编织方面而不是 aspectJ 将其清除?

下面的这些 SO 帖子似乎没有任何关于如何解决这个问题的结论?

Lombok 不能与 AspectJ 一起使用? Gradle + RoboBinding 与 AspectJ + Lombok 不兼容

讨论线程 http://aspectj.2085585.n4.nabble.com/AspectJ-with-Lombok-td4651540.html

谢谢你,塞策

0 投票
1 回答
1679 浏览

spring-security - 使用 AspectJ CTW 时禁用 Spring AOP MethodSecurityInterceptor

我有一个使用 Spring Security 的项目,并且正在使用 AspectJ 编译时编织 (CTW) 来编织spring-security-aspects. 这允许我@PreAuthorize在非 Spring 托管类中使用注释(工作正常),但我现在遇到了 Spring 托管类的问题。

我有一个@Controller使用这种方法的控制器(用 注释):

这一切似乎都工作正常,除了 Spring 似乎仍在代理 Controller bean 并点击MethodSecurityInterceptor. 这意味着该hasRole()方法被命中两次,一次来自代理,第二次来自 AspectJ 编织代码。

我正在使用@EnableAutoConfiguration并启用了全局方法安全性@EnableGlobalMethodSecurity(prePostEnabled = true, mode = AdviceMode.ASPECTJ)。我怀疑我的配置中的某些东西把事情搞砸了,有没有对 Spring Security 或 Spring AOP 有更多了解的人知道这里可能发生了什么?

控制器肯定已经与 AspectJ 代码交织在一起,因为它在(反编译的)类文件中可见:

这是一个部分堆栈跟踪,可以帮助解释正在发生的事情,本质上,当 MethodSecurityInterceptor 完成它的工作并调用mi.proceed()它时,它将命中编织在方法主体中的 AspectJ 代码。

0 投票
1 回答
58 浏览

java - 使用方面记录域对象(编译时编织)

我想使用aspects. 但是那些aspects应该做编译时编织而不是制作代理对象。

除了 之外,还有哪些选择AspectJ