如何使用 类 中不受 Micronaut 管理的 bean?

How to use beans inside classes that are not managed by the Micronaut?

我有一个带有 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 在实体中注入服务。但是对于 AuthenticatedUserService 的实例,这个 returns NullPointerException。实体看起来像这样。

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

@Transient
@Inject
AuthenticatedUserService authenticatedUserService;

...  

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

有没有一种方法可以在 类 中使用不受 Micronaut 管理的 AuthenticatedUserService?

我想做类似 this 但在 Micronaut 中的事情。

所以,我找到了一种方法来做到这一点。我们需要 ApplicationContext 的实例来执行此操作

public class ApplicationEntryPoint {

public static ApplicationContext context;

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

然后我创建了一个从 ApplicationContext

中提取 bean 的实用程序
public class BeanUtil{
 public static <T> T getBean(Class<T> beanClass) {
    return EntryPoint.context.getBean(beanClass);
 }
}

最后,使用BeanUtil.

提取实体中AuthenticatedUserService的bean
@Entity(name = "car")
public class Car {
...
private String createdBy;

...  

 @PrePersist
 public void prePersist() {
 var authenticatedUserService = BeanUtil.getBean(AuthenticatedUserService.class);
  this.createdBy = authenticatedUserService.getUserIdentifier();
 }
}