@RefreshScope可以是渴望

时间:2015-05-06 23:05:14

标签: java spring lazy-loading eager-loading spring-cloud

Spring Cloud中的新@RefreshScope非常棒。但副作用是豆子变得懒散。大多数情况下,这是一个非问题,但是急切加载的bean允许在启动时确保DI,属性值设置等,而不是在运行时。有没有办法使用@RefreshScope并导致受影响的bean被急切地加载?

1 个答案:

答案 0 :(得分:0)

我通过实现捕获Refresh事件的侦听器解决了这个“问题”。 然后,我遍历上下文中的每个bean并调用getClass()方法。 (对bean的任何其他方法调用都会触发其实例化-getClass()很方便,因为它存在于所有bean中。)

@Service
public class RefreshListener {

    private final Logger logger = LoggerFactory.getLogger(RefreshListener.class);

    @Autowired
    ApplicationContext applicationContext;

    @EventListener
    public void onRefreshScopeRefreshed(final RefreshScopeRefreshedEvent event) {
        logger.info("Received Refresh event. Refreshing all beans...");
        for (String beanName : applicationContext.getBeanDefinitionNames()) {
            logger.info("Refreshing bean " + beanName);
            applicationContext.getBean(beanName).getClass();
        }
    }
}

希望有帮助。