Упомянутый вопрос описывает, как ссылаться на поле экземпляра, введенное Spring из статического метода.
Поскольку модификаторы static
не имеют доступа к полям экземпляра, это может иметь смысл.
Но этоэто не стандарт, это обходной путь для унаследованного кода или библиотек, где кажется сложным или невозможным сделать статический метод экземпляром метода.
Полагаю, это связано с тем, что при использовании репозитория внутри static ethod, но если я удалю static из любого места и попытаюсь получить доступ к методу addNotification (), возникает другая ошибка:
Нестатический метод не может быть вызван из статического контекста.
Вы находитесь на неправильном пути.
Чтобы использовать зависимости bean-компонентов, вам нужно внедрить их туда, где они нужны в других bean-компонентах.
Вы никогда не будете определять методы с модификатором static
в bean-компоненте и вызывать его из другого bean-компонента с помощью префикса класса.
Bean-объекты являются экземплярами.Они не связаны с самим классом.
Кроме того, если notificationRepo.save(notification);
вызывает исключение NullPointerException, это означает одну вещь: ваш класс не является бобовой пружиной, потому что здесь контекст Spring не будет успешно загружен, если не может быть разрешена зависимость notificationRepo
:
@Autowired
public NotificationProcessing(NotificationRepo notificationRepo) {
NotificationProcessing.notificationRepo = notificationRepo;
}
Короче говоря, аннотируйте свой класс, чтобы он стал Spring Bean, и удалите все эти статические модификаторы:
@Component
public class NotificationProcessing {
...
}
И добавьте это таким образом в контроллер:
private NotificationProcessing notificationProcessing;
public MyController(NotificationProcessing notificationProcessing){
this.notificationProcessing = notificationProcessing;
}
@RequestMapping(method = RequestMethod.POST)
public Offer newOffer (@RequestBody Offer offer) {
notificationProcessing.addCampaignNotification(offer);
return repo.save(offer);
}