设置方式
Spring Boot启动类设置
public class ApplicationContextHolder {
public static ApplicationContext applicationContext;
}
public class DoubucketItemsApplication {
public static void main(String[] args) {
ApplicationContextHolder.applicationContext = SpringApplication.run(DoubucketItemsApplication.class, args);
}
}
容器事件处理程序设置
@Component
@AllArgsConstructor
public class ApplicationContextHolder implements ApplicationRunner {
public static ApplicationContext applicationContext;
private ApplicationContext context;
@Override
public void run(ApplicationArguments args) {
applicationContext = context;
}
}
ApplicationContextAware设置
@Component
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextHolder.applicationContext = applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}
}
volatile问题
尚未确认设置applicationContext
的操作是否与后续的读取有happens-before关系,保险的话可以为变量加上volatile
private static volatile ApplicationContext applicationContext;
bean创建次序问题
当需要保证ApplicationContextHolder
优先被创建时,需要使用如@Order(value = Integer.MIN_VALUE)
的方式保证优先级,数字越小优先级越高。
PREVIOUSjQuery的each方法实现循环的break和continue
NEXTJava环境变量设置最佳实践