Java @RefreshScope会迫不及待吗
SpringCloud中新的Java @RefreshScope会迫不及待吗,java,spring,lazy-loading,eager-loading,spring-cloud,Java,Spring,Lazy Loading,Eager Loading,Spring Cloud,SpringCloud中新的@RefreshScope非常棒。但另一个副作用是,bean被延迟加载。大多数情况下,这不是问题,但急切加载的bean允许DI、属性值设置等在启动时得到保证,而不是在运行时得到保证。有没有办法使用@RefreshScope并导致受影响的bean被急切地加载?我通过实现一个捕获刷新事件的侦听器解决了这个“问题”。 然后我迭代上下文中的每个bean并调用getClass()方法。(对bean的任何其他方法调用都将触发其实例化-getClass()非常方便,因为它适用于所有
@RefreshScope
非常棒。但另一个副作用是,bean被延迟加载。大多数情况下,这不是问题,但急切加载的bean允许DI、属性值设置等在启动时得到保证,而不是在运行时得到保证。有没有办法使用@RefreshScope
并导致受影响的bean被急切地加载?我通过实现一个捕获刷新事件的侦听器解决了这个“问题”。
然后我迭代上下文中的每个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();
}
}
}