java - Spring单例初始化完成后如何运行方法?

标签 java spring dependency-injection initialization

使用 Spring 3.0.x,我遇到了 Bean 初始化方法正在运行的问题,作为它的一部分获取一些信息,然后在另一个线程中(原始 init() 线程等待其他线程完成)尝试根据该信息检索获取一个或多个 Bean。问题是,这些其他的 Bean 也是单例的,还没有被初始化。在 getSingleton() 方法的 DefaultSingletonBeanRegistry 中有一个 synchronized() block 。

问题出现了,我正在尝试获取/初始化一个 Bean,而我当前正在初始化一个 Bean,所以我在 init() 方法中卡住了主线程,而另一个线程试图获取另一个单例 Bean , 并且因为第一个线程有锁而被阻塞。

所以,在我看来,我有 2 个选择:

1) 在完全创建单例之后让 Spring 运行一个方法来执行实际的数据获取和处理 2) 想出传递给的消息,将数据返回给主线程,然后在主线程中处理它们,因为它已经有了监视器锁

想法?想法?我怎样才能让#1 工作?

最佳答案

您是否尝试过实现 InitializingBean界面

class MyBean implements InitializingBean{

    @Override
    public void afterPropertiesSet(){
       // fetch information, etc
    }
}

根据文档:

Interface to be implemented by beans that need to react once all their properties have been > set by a BeanFactory: for example, to perform custom initialization...

关于java - Spring单例初始化完成后如何运行方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106185/

相关文章:

java - Windows\System32\lpsolve55j.dll : Can't find dependent libraries

java - 如何在android中实时统计按键次数

java - HTML 到图像的转换

java - Selenium TestNG 测试依赖于其他方法

playframework - 在play框架中集成Lucene

typescript - Nest 无法解决对循环依赖的服务依赖

spring - FileSystemResource 以内容类型 json 返回

java - Spring,使用 POST 重定向到外部 url

Spring MVC - 发生 http 404 时的 RestTemplate 启动异常

java - 添加@Transactional 注释后注入(inject)停止