目前我正在阅读一些关于Quarkus的文档,其中他们不断攻击Spring的依赖注入DynamicProxy机制。
我在引用
Spring为接口和开发人员添加到接口的任何其他方法声明创建实现代理。接口中附加方法的定义,包括方法名、返回类型和方法参数,都是非常重要的:它们影响动态创建的代理的实现。这种运行时代理有助于延长启动时间并增加内存使用量。
我不知道Spring AOT与Sping Boot 3.x / Spring 6.x有什么不同,但如果我没记错的话,在Spring中使用AspectJ Load Time Weaving可以进行依赖注入。
目前我能找到的关于它的文档只有using aspectj,Using AspectJ to dependency inject domain objects with Spring和aop,特别是第二个链接非常旧,来自Spring 3.0.0-RC 3,第一个链接包含非常相似的信息。
所以我的问题是,“在AspectJ的帮助下,Sping Boot 3.x / Spring 6.x仍然可以进行依赖注入吗?”
我在Sping Boot 中使用'@Configuration'和'@Bean'注解进行Bean配置,所以我从来没有使用过@Configurable,当然如果我正在寻找Spring Boot应用程序的启动时间改进,Load Time Weaving是行不通的,但如果我可以将其转换为编译时编织,我认为我可以缩小与Quarkus的性能差距,而Spring的DynamicProxy / CGlib代理总是在运行时发生,如果Spring没有不要为它改变AOT中的任何东西,这对Spring来说总是不利的。
那么,这些技术在Sping Boot 3.x / Spring 6.x中仍然可用吗?或者这些技术已经过时了。
1条答案
按热度按时间k97glaaz1#
在当前的Spring版本中,无论有没有 Boot ,您仍然可以使用与以前相同的选项。也就是说,你仍然可以通过load-time或compile-time weaving使用Spring AOP(基于代理)而不是原生AspectJ:
我并不想显得不友好,但是我不禁想知道,如果您甚至不能浏览您已经作为第一个链接发布的精心编排的Spring手册,那么您如何成为一名程序员。也许下一次,只要给予它一分钟的下沉,并试图让您的轴承时,打开一个手册。