gpt4 book ai didi

java - 为什么将内部类注入(inject)同一个外部类中的另一个内部类不起作用?

转载 作者:行者123 更新时间:2023-12-02 04:38:21 25 4
gpt4 key购买 nike

我有一个类,里面有两个内部类。我用@Service注释了外部类,并用@Component注释了两个内部类。InnerClassA 被@Autowired 到OuterClass 中,InnerClassB 被@Autowired 到InnerClassA 中。即使所有三个bean都已初始化,但InnerClassA内的innerClassB为空。

@Service
public class ChatService{
@Autowired
private ChatServerUtils chatServerUtils;
@Autowired
private PushNotificationHelper pushNotificationHelper;

@Component
public class PushNotificationHelper{
@Autowired
private ChatServerUtils chatServerUtils; //this is null
@Autowired
private PushService pushService;

@Async
public void sendPushNotifications(Group group){
Map<String, Integer> notificationData= new HashMap<>();
Map<String, CompletableFurure<Integer>> unreadCountFutures = new ArrayList<>();
for(Member member : group){
CompletableFurure<Integer> unreadCountFuture = chatServerUtils.getUnreadCount(group, member);
unreadCountFutures.put(member.getId(), unreadCountFuture);
}
for(Map.Entry<String, CompletableFurure<Integer>> entry : unreadCountFutures.entrySet()){
notificationData.put(entry.getKey(), entry.getValue().get());
}
pushService.sendNotifications(notificationData);
}
}

@Component
public class ChatServerUtils{
@Async
public CompletableFuture<Integer> getUnreadCount(Group group, Member member){
...
}
}
}

更多信息:外部类是一种聊天服务,处理与聊天用户、消息和组相关的事务。还有另一种服务可以发送推送通知。当消息发送到组时,我必须向组中的所有用户发送推送通知。在发送请求到推送通知服务之前,我必须联系外部聊天服务器并获取每个群组成员的未读消息计数。聊天服务器的API不支持单次调用获取所有用户的未读计数。由于这是一个耗时的过程,因此我需要异步执行。这就是为什么我必须将这些方法移至单独的类中(以使用 @Async)。除了 ChatServiceUtil 类中显示的方法之外,PushNotificationHelper 和 ChatService 都使用了更多方法。

最佳答案

如何使用外部 ChatService 类中的 chatServerUtils 变量?由于 PushNotificationHelper 是由 ChatService 封装的,因此它应该有权访问私有(private)变量。

除此之外,我仍然认为您的代码没有理由受益于这种内部/外部类构造。你说你有多个内部类从外部类使用的方法,但是如果你将外部类注入(inject)到这些内部类中,这些内部类仍然可以使用这些方法。对我来说,您似乎应该仔细研究代码的架构,也许重新考虑其中的一些内容。如果您不想这样做,希望我的上述建议对您有所帮助。

关于java - 为什么将内部类注入(inject)同一个外部类中的另一个内部类不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56536504/

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