`
grzrt
  • 浏览: 188797 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过ApplicationContextAware获取spring容器中的bean

 
阅读更多

import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;


/
* 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
*
* @author zhuh
* @version 1.0
* @created 2011-9-19 上午10:14:10
* @history
* @see
/
public class SpringContextHolder implements ApplicationContextAware{

private static ApplicationContext applicationContext;

/
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}

/
* 取得存储在静态变量中的ApplicationContext.
/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}

/
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}

/
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
* 如果有多个Bean符合Class, 取出第一个.
/
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
Map beanMaps = applicationContext.getBeansOfType(clazz);
if (beanMaps!=null && !beanMaps.isEmpty()) {
return (T) beanMaps.values().iterator().next();
} else{
return null;
}
}

private static void checkApplicationContext() {
if (applicationContext == null) {
throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
}
}

}

分享到:
评论

相关推荐

    获取Spring容器

    在这个类中,我们定义了一个静态方法`getBean`,通过传入Bean的名称,可以从Spring容器中获取对应的Bean实例。 ##### 3. 通过公共方法获取其他对象 一旦`ApplicationContextUtil`被配置并初始化,就可以通过调用其...

    获取spring容器的方法

    本文将深入探讨几种常见的获取Spring容器的方法,包括使用`ApplicationContext`、通过`ServletContext`、利用`ApplicationObjectSupport`、`WebApplicationObjectSupport`以及实现`ApplicationContextAware`接口等。...

    Spring实战之让Bean获取Spring容器操作示例

    测试类`SpringTest`通过`ClassPathXmlApplicationContext`来加载Spring的配置文件,并从容器中获取`Person`的Bean实例。然后,调用`sayHi`方法来演示Bean是如何使用Spring容器的引用的。 ### 知识点七:操作注意...

    Web项目中获取SpringBean与在非Spring组件中获取SpringBean.pdf

    这时,我们就需要一种方式来访问Spring的ApplicationContext,它是Spring容器的核心,负责管理所有Bean。 一种常见的做法是创建一个工具类,如`SpringUtil`,该类实现`ApplicationContextAware`接口。这个接口是...

    Spring中关于Bean的管理的课件

    12. **BeanFactoryAware**:Bean可以通过实现这个接口获取到BeanFactory实例,从而在运行时能够访问到Spring容器的其他服务。 13. **ApplicationContextAware**:类似于BeanFactoryAware,但提供的是...

    spring-aware接口实现与bean作用域(spring多容器层面)

    `ApplicationContextAware`是其中的一个典型接口,当我们想要在非托管类(即非Spring Bean)中获取Spring容器中的其他Bean时,可以使用这个接口。 `ApplicationContextAware`接口提供了`setApplicationContext`方法...

    关于SpringBoot获取IOC容器中注入的Bean(推荐)

    "SpringBoot获取IOC容器中...在本文中,我们详细介绍了SpringBoot IOC容器中获取注入的Bean对象的方式和Bean对象的生命周期。通过这些知识点,我们可以更好地理解和使用SpringBoot框架,提高应用程序的开发效率和质量。

    17. Spring Boot普通类调用bean【从零开始学Spring Boot】

    这样,Spring会自动将配置文件中的值注入到bean中。 7. **Spring Boot测试**: 在测试场景下,可以使用`@SpringBootTest`注解启动整个Spring Boot应用,然后使用`@Autowired`注入需要的bean进行测试。 8. **Bean...

    Spring在应用中获得Bean的方法

    总结来说,Spring提供多种方式让我们在应用中获取Bean,包括直接通过名称、类型,或者利用注解实现自动装配。了解这些机制,有助于我们更好地理解和使用Spring框架,提高代码的可维护性和灵活性。同时,源码分析能...

    Spring启动后获取所有拥有特定注解的Bean实例代码

    首先,通过实现ApplicationListener接口,可以在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象。ApplicationListener是一个事件监听器接口,用于监听Spring容器中的事件。ContextRefreshedEvent是一个...

    Spring Bean生命周期.pdf

    属性赋值阶段,Spring容器会将Bean定义中配置的属性值设置到Bean实例上。在这个过程中,容器会考虑属性值的依赖关系,并按需注入其他Bean或设置具体的值。 3. 初始化(Initialization) 初始化阶段是指Bean已经实例...

    普通对象使用spring容器中的对象的实现方法

    实现方法的主要思想是使用spring框架提供的ApplicationContextAware接口来获取spring容器中的对象。这个接口提供了获取ApplicationContext对象的方法,从而可以使用ApplicationContext对象来获取spring容器中的对象...

    Spring Boot中Bean定义方调用方式解析

    这样,我们就可以在普通类中获取 applicationContext 对象。 ```java package me.shijunjie.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; ...

    解析Java中如何获取Spring中配置的bean

    本文将深入探讨如何在Java程序中获取Spring框架中配置的bean。 首先,我们来理解一下Spring框架的基本概念。Spring是一个轻量级的框架,其核心特性包括控制反转(Inversion of Control, IoC)和面向切面编程...

    spring的bean作用域

    自定义作用域需要实现ApplicationContextAware接口来获取ApplicationContext,并通过实现Scope接口来定义作用域的行为。 理解并正确使用Bean的作用域是优化Spring应用程序性能和资源管理的关键。选择合适的作用域...

    Spring Bean生命周期&BeanDefinitions1

    默认情况下,Bean的scope为"singleton",表示Spring容器只创建一个实例,并将其缓存。如果scope设为"prototype",每次请求都会创建一个新的Bean实例。 7. **销毁**:当容器关闭时,如果是"singleton"作用域的Bean,...

    Spring通过ApplicationContext主动获取bean的方法讲解

    Spring通过ApplicationContext主动获取bean的...通过使用ApplicationContext,我们可以轻松地获取到Spring容器中的bean,并且可以根据需要来获取不同的bean。这个方法可以帮助我们更好地管理和使用Spring容器中的bean。

    Spring在代码中获取bean的方法小结

    在服务器启动后,Spring容器初始化完成,我们可以通过以下代码获取Bean: ```java WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); Object beanInstance = wac.getBean(beanID); ``...

    Spring实现Aware接口自定义获取bean的两种方式

    三、在JUnit测试中获取bean对象 在JUnit测试中,我们可以使用ClassPathXmlApplicationContext来获取ApplicationContext对象,然后使用getBean方法来获取bean对象。代码如下: @Test public void test() throws ...

    Spring part 2 :Bean的生命周期

    在Spring容器中,Bean的生命周期还包括容器感知的初始化和销毁,例如ApplicationContextAware接口允许Bean获取到容器引用,而ApplicationEventPublisherAware接口使Bean能够发布和监听应用事件。 总的来说,Spring ...

Global site tag (gtag.js) - Google Analytics