ApplicationEventPublisher NullPointerException - PullRequest
       51

ApplicationEventPublisher NullPointerException

0 голосов
/ 25 февраля 2020

У меня есть следующий customEventPublisher-class:

@Component
public class CustomEventPublisher {

@Autowired
private static ApplicationEventPublisher applicationEventPublisher;

public static void doStuffAndPublishAnEvent(User user) {
    OnPostUserDataEvent onPostUserDataEvent = new OnPostUserDataEvent(user, REST_URL);
    applicationEventPublisher.publishEvent(onPostUserDataEvent);
   }
 }

publishEvent-метод, вызванный в Service:

 public User create(User user) {

    CustomEventPublisher.doStuffAndPublishAnEvent(user);

    return repository.save(user);
}

config:

 <context:component-scan base-package="example.service"/>
 <context:component-scan base-package="example.util.emailUtil"/>

Событие реализовано в:

public class OnPostUserDataEvent extends ApplicationEvent {

private static final long serialVersionUID = 1L;
private String appUrl;

private User user;

public OnPostUserDataEvent(User user, String appUrl) {
    super(user);
    this.user = user;
    this.appUrl = appUrl;
    }
}

И я улавливаю исключение NullPointedException для:

 applicationEventPublisher.publishEvent(onPostUserDataEvent)

Возможно, ApplicationEventPublisher не является @Autowired, но я не могу понять, почему.

1 Ответ

1 голос
/ 25 февраля 2020

Проблема в том, что вы боретесь с АОП. doStuffAndPublishAnEvent метод is stati c, поэтому он не вызывается для экземпляра, в который можно внедрить ApplicationEventPublisher.

Чтобы преодолеть это, вы должны сделать doStuffAndPublishAnEvent non-stati c и введите CustomEventPublisher в службу, чтобы вы могли вызывать метод через прокси-сервер для экземпляра.

...