Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在@HandleBeforeHandler之前对请求范围的bean调用@PostConstruct?_Java_Spring_Spring Data_Spring Data Rest - Fatal编程技术网

Java 如何在@HandleBeforeHandler之前对请求范围的bean调用@PostConstruct?

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端点来保存资源时,首先调用@

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

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

@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) {
         ...
    }
}