如何在@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) {
...
}
}
在我的 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) {
...
}
}