如何在@HandleBeforeCreate 处理程序之前对请求作用域bean 调用@PostConstruct?

How to invoke @PostConstruct on request scoped bean before @HandleBeforeCreate handler?

在我的 Spring 应用程序中,我有一个具有 request 范围的 bean:

@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyBean {

    @PostConstruct
    public void init() {
       ...
    }

我还有一个 MongoDB 事件处理程序:

@Component
@RepositoryEventHandler
public class MyEventHandler {

    @HandleBeforeCreate
    public void beforeCreateInstance(Object instance) {
        ...
    }
 }

当我调用 Spring 数据 REST 端点来保存我的资源时,@HandleBeforeCreate 首先被调用,然后 @PostConstruct 被调用。

如何更改此调用的顺序?我想在 MongoDB 事件处理程序启动之前在 MyBean 上调用 @PostConstruct

explained in this answer, scoped beans get only initialized when the get referenced。因此,如果 MyEventHandler 引用 MyBean,则 MyBean 应该被初始化,包括任何 PostConstruct 处理。

当然,依赖一个您随后不使用的 bean 会很奇怪。这正是 @DependsOn 的目的。所以像这样改变你的MyEventHandler

@Component
@RepositoryEventHandler
@DependsOn("myBean")
public class MyEventHandler {

    @HandleBeforeCreate
    public void beforeCreateInstance(Object instance) {
         ...
    }
}