package com.jc.system.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @Component public class SpringContextHolder implements ApplicationContextAware, DisposableBean { private static ApplicationContext applicationContext = null; private static Logger logger = LoggerFactory .getLogger(SpringContextHolder.class); public static ApplicationContext getApplicationContext() { return applicationContext; } @SuppressWarnings("unchecked") public static <T> T getBean(String name) { return (T) applicationContext.getBean(name); } public static <T> T getBean(Class<T> requiredType) { return applicationContext.getBean(requiredType); } public static void clearHolder() { logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext); applicationContext = null; } @Override public void setApplicationContext(ApplicationContext applicationContext) { if (SpringContextHolder.applicationContext != null) { logger.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + SpringContextHolder.applicationContext); } SpringContextHolder.applicationContext = applicationContext; // NOSONAR } @Override public void destroy() throws Exception { SpringContextHolder.clearHolder(); } }
相关推荐
最后,在Spring容器关闭时,会调用实现DisposableBean接口的destroy方法来销毁Bean。 Spring Bean生命周期的管理让开发者能够精确控制Bean的创建和销毁过程,从而满足不同场景下的需求。开发者可以通过实现这些扩展...
可以通过实现InitializingBean接口、使用@PostConstruct注解、指定init-method,以及实现DisposableBean接口、使用@PreDestroy注解、指定destroy-method来分别控制Bean初始化和销毁时的行为。 2. **XxxAware接口**...
总的来说,Spring Bean的生命周期是高度可定制的,开发者可以通过实现接口、配置属性等方式控制Bean的行为。然而,为了保持代码的松耦合,建议尽量减少对Spring接口的直接实现,而更多地利用注解和配置文件来实现...
此外,如果Bean实现了ApplicationContextAware接口,Spring会在初始化时注入ApplicationContext对象。 4. **后处理**: 在Bean初始化完成后,Spring提供了两种类型的后处理器: - `BeanPostProcessor`:它允许在...
在项目中,我们可以通过实现`ApplicationContextAware`接口或使用`@Autowired`注解来获取Spring容器中的bean。 其次,**DI(Dependency Injection)**,依赖注入,是IOC的一种实现方式。Spring通过DI管理对象之间的...
此外,bean可以实现特定接口(如BeanNameAware、BeanFactoryAware、ApplicationContextAware)以参与到生命周期的不同阶段。还有BeanPostProcessor接口,它的方法会在bean初始化前后被调用。当bean不再需要时,可以...
编程式通过实现接口如InitializingBean和DisposableBean,然后重写其特定方法(afterPropertiesSet()和destroy())来控制Bean的初始化和销毁。声明式则是在XML配置文件中使用`init-method`和`destroy-method`属性来...
- 如果实现了特定接口,如`BeanNameAware`、`BeanFactoryAware`或`ApplicationContextAware`,则调用相应的方法 - 如果实现了`BeanPostProcessor`,执行`postProcessBeforeInitialization`方法 - 如果实现了`...
Spring框架提供了一系列生命周期接口,如`InitializingBean`和`DisposableBean`,允许开发者自定义Bean的初始化和销毁逻辑。 ##### 3.4.2 知道你是谁 Spring框架允许Bean通过`BeanNameAware`和`BeanFactoryAware`等...
Spring还支持自定义Bean的属性,包括Aware接口的使用,例如ApplicationContextAware或BeanNameAware。 - **Aware接口**:通过实现特定的Aware接口,Bean可以获得Spring容器中的资源和信息。 - **自定义属性**:...
- 如果Bean实现了特定的Spring接口,如`BeanNameAware`,`BeanFactoryAware`,`ApplicationContextAware`,Spring会在适当的时间调用相应的方法。 - `BeanNameAware`的`setBeanName()`方法用于将Bean的ID传递给...
例如,ApplicationContextAware接口的实现类可以监听ApplicationContext的事件,如上下文初始化和关闭事件。 以上内容仅是Spring框架部分核心概念的概述,Spring还有更多高级特性,如Spring Boot、Spring Data、...
- **ApplicationContextAware**:Bean 可以通过实现此接口来获取 ApplicationContext。 - **BeanPostProcessor**、**BeanFactoryPostProcessor**:同上。 - **PropertyPlaceholderConfigurer**:同上。 #### 四、...
- **DisposableBean**:实现该接口的bean会在Spring容器销毁时调用`destroy`方法。 - **DestroyMethod**:类似地,可以通过`destroy-method`属性指定一个bean的销毁方法。 #### 三、示例及应用场景 ##### ...
- 如果 Bean 实现了 `BeanNameAware` 接口,Spring 会调用 `setBeanName` 方法,传递 Bean 的 ID。 - 实现 `BeanFactoryAware` 的 Bean 会通过 `setBeanFactory` 方法得到 `BeanFactory`,以便于访问容器服务。 -...
- **生命周期接口**:Spring提供了多个生命周期接口,如InitializingBean和DisposableBean,允许开发者自定义Bean的初始化和销毁逻辑。 - **了解自身**:通过ApplicationContextAware接口,Bean可以获得对...
12. DisposableBean的destory()方法:如果Bean实现了DisposableBean接口,Spring将会在Bean实例销毁之前调用该接口的destory()方法,来完成一些销毁之前的处理工作。 在这个阶段,如果Bean实现了DisposableBean接口...
- **1.6.2 ApplicationContextAware与BeanNameAware**: 提供了一些接口让Bean能够知道自身所在的上下文环境和名称。 - **1.6.3 其他Aware接口**: Spring还提供了其他的一些Aware接口,如`EnvironmentAware`等,使得...