ApplicationContextHolder
是一个常见的设计模式,用于在应用程序的各个部分之间共享 ApplicationContext
实例。ApplicationContext
是 Spring 框架中的一个核心接口,它提供了对应用程序上下文的访问,包括 Bean 的管理、配置信息的获取等。
ApplicationContext:
ApplicationContextHolder:
ApplicationContext
的引用。ApplicationContextHolder
获取到 ApplicationContext
,从而访问 Spring 管理的 Bean。ApplicationContext
。ApplicationContext
的管理集中在一个地方,便于维护和调试。通常有两种实现方式:
ApplicationContext
。ApplicationContextHolder
。ApplicationContextHolder
来获取 Spring 管理的 Bean。ApplicationContextHolder
来获取其他 Bean 进行处理。ApplicationContextHolder
来获取 Spring 管理的 Bean。import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext context) {
applicationContext = context;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextHolder implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext context) {
this.applicationContext = context;
}
public ApplicationContext getApplicationContext() {
return applicationContext;
}
public <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
}
问题: ApplicationContextHolder
中的 ApplicationContext
为空。
原因:
ApplicationContextHolder
没有被 Spring 正确初始化。ApplicationContextHolder
没有被标记为 @Component
或其他 Spring 注解。解决方法:
ApplicationContextHolder
被标记为 @Component
或其他 Spring 注解。ApplicationContextHolder
在 Spring 容器启动时被正确初始化。@Component
public class ApplicationContextHolder implements ApplicationContextAware {
// 其他代码保持不变
}
通过这种方式,可以确保 ApplicationContextHolder
在 Spring 容器启动时被正确初始化,并且可以在应用程序的任何地方通过 ApplicationContextHolder
获取到 ApplicationContext
。
没有搜到相关的沙龙