У меня есть класс, в котором есть два внутренних класса. Я аннотировал внешний класс с помощью @Service, а оба внутренних класса - с помощью @Component.
InnerClassA @Autowired в OuterClass и InnerClassB @Autowired в InnerClassA.
Даже если все три компонента инициализируются, но innerClassB внутри InnerClassA имеет значение null.
@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){
...
}
}
}
Подробнее: Outer class - это чат-сервис, который обрабатывает вещи, связанные с пользователями чата, сообщениями и группами. Существует еще один сервис для отправки push-уведомлений. Когда сообщение отправляется в группу, я должен отправить push-уведомления всем пользователям в группе. Перед отправкой запроса на услугу push-уведомлений мне нужно связаться с внешним сервером чата и получить количество непрочитанных сообщений для каждого члена группы API сервера чата не поддерживает получение непрочитанных подсчетов всех пользователей за один вызов. Поскольку это трудоемкий процесс, мне нужно сделать это асинхронно. Вот почему я должен переместить эти методы в отдельные классы (чтобы использовать @Async). За исключением показанного метода в классе ChatServiceUtil, есть и другие методы, используемые как PushNotificationHelper, так и ChatService.