gpt4 book ai didi

java - 构造函数注入(inject)阻止自定义资源处理

转载 作者:行者123 更新时间:2023-11-30 02:28:57 25 4
gpt4 key购买 nike

在我的(重要的)Spring Boot 1.5.4 应用程序中,使用 Spring Data REST 和 HATEOAS 利用 Spring websockets,我有一些自定义资源处理器、一些自定义 Controller 和一些自定义存储库。遗憾的是,当我在一个特定的 Spring @Service 类中使用构造函数注入(inject)来实现 MessageSendingOperations 依赖项时,我的自定义资源处理器不再被调用。恢复构造函数注入(inject)会恢复我的自定义资源处理器的执行,即从以下位置恢复:

private final MessageSendingOperations<String> messageTemplate;

@Autowired
public ChannelHandler(MessageSendingOperations<String> messageTemplate) {
this.messageTemplate = messageTemplate;
}

至:

@Autowired
private MessageSendingOperations<String> messageTemplate;

“重新启用”我的自定义资源处理器,这会导致 null messageTemplate。所以,某个地方有问题......但在哪里???有什么想法如何追踪这个问题吗?

最佳答案

您是否尝试过使 messageTemplate 成为延迟注入(inject)的代理?例如:

public ChannelHandler(@Lazy MessageSendingOperations<String> messageTemplate) {
this.messageTemplate = requireNonNull(messageTemplate, "messageTemplate");
}

来自Javadoc :

In addition to its role for component initialization, this annotation may also be placed on injection points marked with Autowired or Inject: In that context, it leads to the creation of a lazy-resolution proxy for all affected dependencies, as an alternative to using ObjectFactory or Provider.

这通常会影响 Bean 的初始化顺序,在本例中允许在 MessageSendingOperations 之前初始化 ChannelHandler。如果没有 @LazyMessageSendingOperations 将首先初始化。

另外:从 Spring 4.3 开始,@Autowiredno longer required对于单参数构造函数。

+1 用于使用构造函数注入(inject)和 final 字段。

关于java - 构造函数注入(inject)阻止自定义资源处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44740095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com