`

实现Spring ApplicationContextAware接口与DisposableBean接口,实现特殊注入

 
阅读更多
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 Bean生命周期.pdf

    最后,在Spring容器关闭时,会调用实现DisposableBean接口的destroy方法来销毁Bean。 Spring Bean生命周期的管理让开发者能够精确控制Bean的创建和销毁过程,从而满足不同场景下的需求。开发者可以通过实现这些扩展...

    详解如何在低版本的Spring中快速实现类似自动配置的功能

    可以通过实现InitializingBean接口、使用@PostConstruct注解、指定init-method,以及实现DisposableBean接口、使用@PreDestroy注解、指定destroy-method来分别控制Bean初始化和销毁时的行为。 2. **XxxAware接口**...

    Spring Bean生命周期&BeanDefinitions1

    总的来说,Spring Bean的生命周期是高度可定制的,开发者可以通过实现接口、配置属性等方式控制Bean的行为。然而,为了保持代码的松耦合,建议尽量减少对Spring接口的直接实现,而更多地利用注解和配置文件来实现...

    day38 09-Spring类的完整生命周期及后处理Bean

    此外,如果Bean实现了ApplicationContextAware接口,Spring会在初始化时注入ApplicationContext对象。 4. **后处理**: 在Bean初始化完成后,Spring提供了两种类型的后处理器: - `BeanPostProcessor`:它允许在...

    自定义Spring核心功能项目源码

    在项目中,我们可以通过实现`ApplicationContextAware`接口或使用`@Autowired`注解来获取Spring容器中的bean。 其次,**DI(Dependency Injection)**,依赖注入,是IOC的一种实现方式。Spring通过DI管理对象之间的...

    spring教程(ppt版)

    此外,bean可以实现特定接口(如BeanNameAware、BeanFactoryAware、ApplicationContextAware)以参与到生命周期的不同阶段。还有BeanPostProcessor接口,它的方法会在bean初始化前后被调用。当bean不再需要时,可以...

    Spring part 2 :Bean的生命周期

    编程式通过实现接口如InitializingBean和DisposableBean,然后重写其特定方法(afterPropertiesSet()和destroy())来控制Bean的初始化和销毁。声明式则是在XML配置文件中使用`init-method`和`destroy-method`属性来...

    spring相关面试题.docx

    - 如果实现了特定接口,如`BeanNameAware`、`BeanFactoryAware`或`ApplicationContextAware`,则调用相应的方法 - 如果实现了`BeanPostProcessor`,执行`postProcessBeforeInitialization`方法 - 如果实现了`...

    spring-reference

    Spring框架提供了一系列生命周期接口,如`InitializingBean`和`DisposableBean`,允许开发者自定义Bean的初始化和销毁逻辑。 ##### 3.4.2 知道你是谁 Spring框架允许Bean通过`BeanNameAware`和`BeanFactoryAware`等...

    Spring官方文档之核心篇

    Spring还支持自定义Bean的属性,包括Aware接口的使用,例如ApplicationContextAware或BeanNameAware。 - **Aware接口**:通过实现特定的Aware接口,Bean可以获得Spring容器中的资源和信息。 - **自定义属性**:...

    基于java的企业级应用开发:Bean的生命周期.ppt

    - 如果Bean实现了特定的Spring接口,如`BeanNameAware`,`BeanFactoryAware`,`ApplicationContextAware`,Spring会在适当的时间调用相应的方法。 - `BeanNameAware`的`setBeanName()`方法用于将Bean的ID传递给...

    java面试Spring.pdf

    例如,ApplicationContextAware接口的实现类可以监听ApplicationContext的事件,如上下文初始化和关闭事件。 以上内容仅是Spring框架部分核心概念的概述,Spring还有更多高级特性,如Spring Boot、Spring Data、...

    SPRING中文开发参考手册

    - **ApplicationContextAware**:Bean 可以通过实现此接口来获取 ApplicationContext。 - **BeanPostProcessor**、**BeanFactoryPostProcessor**:同上。 - **PropertyPlaceholderConfigurer**:同上。 #### 四、...

    spring其他标签

    - **DisposableBean**:实现该接口的bean会在Spring容器销毁时调用`destroy`方法。 - **DestroyMethod**:类似地,可以通过`destroy-method`属性指定一个bean的销毁方法。 #### 三、示例及应用场景 ##### ...

    6.1、框架—Spring(14题)1

    - 如果 Bean 实现了 `BeanNameAware` 接口,Spring 会调用 `setBeanName` 方法,传递 Bean 的 ID。 - 实现 `BeanFactoryAware` 的 Bean 会通过 `setBeanFactory` 方法得到 `BeanFactory`,以便于访问容器服务。 -...

    spring-reference1.2.pdf

    - **生命周期接口**:Spring提供了多个生命周期接口,如InitializingBean和DisposableBean,允许开发者自定义Bean的初始化和销毁逻辑。 - **了解自身**:通过ApplicationContextAware接口,Bean可以获得对...

    Spring中Bean的生命周期使用解析

    12. DisposableBean的destory()方法:如果Bean实现了DisposableBean接口,Spring将会在Bean实例销毁之前调用该接口的destory()方法,来完成一些销毁之前的处理工作。 在这个阶段,如果Bean实现了DisposableBean接口...

    spring-core.pdf

    - **1.6.2 ApplicationContextAware与BeanNameAware**: 提供了一些接口让Bean能够知道自身所在的上下文环境和名称。 - **1.6.3 其他Aware接口**: Spring还提供了其他的一些Aware接口,如`EnvironmentAware`等,使得...

Global site tag (gtag.js) - Google Analytics