Как использовать бины внутри классов, которые не управляются Микронавтом? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть объект с полем created by, и мне нужно заполнить это поле, используя AuthenticatedUserService, который я создал. Мне нужно внедрить этот сервис в объект, чтобы я мог сгенерировать значение для поля created by.

Это моя служба аутентифицированных пользователей

@Singleton
public class AuthenticatedUserService {

@Inject
private SecurityService securityService;

public String getUserIdentifier() {
    var authentication = securityService.getAuthentication();

    return String.valueOf(authentication.get().getAttributes().get("identifier"));
}

И я попытался внедрить сервис в организации, использующей @Transient. Но это возвращает NullPointerException для экземпляра AuthenticatedUserService. Сущность выглядит следующим образом.

@Entity(name = "car")
public class Car {
...
private String createdBy;

@Transient
@Inject
AuthenticatedUserService authenticatedUserService;

...  

 @PrePersist
 public void prePersist() {
    this.createdBy = authenticatedUserService.getUserIdentifier();
 }
}

Есть ли способ использовать AuthenticatedUserService внутри классов, которые не управляются Micronaut?

Я хочу sh сделать что-то вроде это , но в Micronaut.

1 Ответ

0 голосов
/ 17 апреля 2020

Итак, я нашел способ сделать это. Нам нужен экземпляр ApplicationContext, чтобы сделать это

public class ApplicationEntryPoint {

public static ApplicationContext context;

public static void main(String[] args) {
    context = Micronaut.run();
 }
}

Затем я создал утилиту, которая извлекает бины из ApplicationContext

public class BeanUtil{
 public static <T> T getBean(Class<T> beanClass) {
    return EntryPoint.context.getBean(beanClass);
 }
}

Наконец, извлек bean-компонент AuthenticatedUserService в Сущность, использующая BeanUtil.

@Entity(name = "car")
public class Car {
...
private String createdBy;

...  

 @PrePersist
 public void prePersist() {
 var authenticatedUserService = BeanUtil.getBean(AuthenticatedUserService.class);
  this.createdBy = authenticatedUserService.getUserIdentifier();
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...