Java 如何在@HandleBeforeHandler之前对请求范围的bean调用@PostConstruct?
在我的Spring应用程序中,我有一个具有请求范围的bean: 我还有一个MongoDB事件处理程序:Java 如何在@HandleBeforeHandler之前对请求范围的bean调用@PostConstruct?,java,spring,spring-data,spring-data-rest,Java,Spring,Spring Data,Spring Data Rest,在我的Spring应用程序中,我有一个具有请求范围的bean: 我还有一个MongoDB事件处理程序: @Component @RepositoryEventHandler public class MyEventHandler { @HandleBeforeCreate public void beforeCreateInstance(Object instance) { ... } } 当我调用Spring数据REST端点来保存资源时,首先调用@
@Component
@RepositoryEventHandler
public class MyEventHandler {
@HandleBeforeCreate
public void beforeCreateInstance(Object instance) {
...
}
}
当我调用Spring数据REST端点来保存资源时,首先调用@handlebeforreacreate
,然后调用@PostConstruct
如何更改此调用的顺序?在MongoDB事件处理程序启动之前,我想在MyBean
上调用@PostConstruct
。因此,如果MyEventHandler
引用了MyBean
,MyBean
应该被初始化,包括任何PostConstruct
处理
当然,依赖一个你不使用的bean是很奇怪的。这正是我们的目的。因此,将您的MyEventHandler
更改如下:
@Component
@RepositoryEventHandler
@DependsOn("myBean")
public class MyEventHandler {
@HandleBeforeCreate
public void beforeCreateInstance(Object instance) {
...
}
}
不幸的是,这似乎没有帮助:(MyEventHandler和MyBean是在不同的JAR中定义的。它们在构建过程中聚合在一起,并通过包名使用组件扫描进行实例化。在添加
@DependsOn
后,我已经注销了处理程序方法调用的序列,我认为这不会影响调用顺序(我仍然可以看到在MyBean.init()之前调用MyEventHandler。DependsOn似乎也处于活动状态,因为如果bean名称错误或不存在,上下文不会启动。还尝试设置@Order(Ordered.HIGHEST\u priority)
在MyBean上也没有结果。实际上,我没有注意到,MyEventHandler通过@Autowired
依赖MyBean,甚至在此之前,我将更新问题中的示例。@PostConstruct处理是在调用someMethod
之前还是之后发生的?我现在也很困惑。我删除了所有附加注释,br应该是现在问题中描述的例子。它说明在beforeCreateInstance()和someNethod()之前调用@PostConstruct
但是,它会在另一个线程上被第二次调用。Eclipse调试器在第一次调用时出现故障并停止,似乎我将第二次@PostConstruct
调用识别为beforeCreateInstance()之前的“之后”.仍在调查..我认为这就是问题所在。另一个对MyBean没有@Autowired依赖关系的EventHandler增加了我的困惑。对于这种情况,我认为您的答案是正确的。我将把问题带到初始形式。
@Component
@RepositoryEventHandler
@DependsOn("myBean")
public class MyEventHandler {
@HandleBeforeCreate
public void beforeCreateInstance(Object instance) {
...
}
}