如何使用 类 中不受 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();
}
}
我有一个带有 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
public class BeanUtil{
public static <T> T getBean(Class<T> beanClass) {
return EntryPoint.context.getBean(beanClass);
}
}
最后,使用BeanUtil
.
@Entity(name = "car")
public class Car {
...
private String createdBy;
...
@PrePersist
public void prePersist() {
var authenticatedUserService = BeanUtil.getBean(AuthenticatedUserService.class);
this.createdBy = authenticatedUserService.getUserIdentifier();
}
}