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");
}
}
}
分享到:
相关推荐
在这个类中,我们定义了一个静态方法`getBean`,通过传入Bean的名称,可以从Spring容器中获取对应的Bean实例。 ##### 3. 通过公共方法获取其他对象 一旦`ApplicationContextUtil`被配置并初始化,就可以通过调用其...
本文将深入探讨几种常见的获取Spring容器的方法,包括使用`ApplicationContext`、通过`ServletContext`、利用`ApplicationObjectSupport`、`WebApplicationObjectSupport`以及实现`ApplicationContextAware`接口等。...
测试类`SpringTest`通过`ClassPathXmlApplicationContext`来加载Spring的配置文件,并从容器中获取`Person`的Bean实例。然后,调用`sayHi`方法来演示Bean是如何使用Spring容器的引用的。 ### 知识点七:操作注意...
这时,我们就需要一种方式来访问Spring的ApplicationContext,它是Spring容器的核心,负责管理所有Bean。 一种常见的做法是创建一个工具类,如`SpringUtil`,该类实现`ApplicationContextAware`接口。这个接口是...
12. **BeanFactoryAware**:Bean可以通过实现这个接口获取到BeanFactory实例,从而在运行时能够访问到Spring容器的其他服务。 13. **ApplicationContextAware**:类似于BeanFactoryAware,但提供的是...
`ApplicationContextAware`是其中的一个典型接口,当我们想要在非托管类(即非Spring Bean)中获取Spring容器中的其他Bean时,可以使用这个接口。 `ApplicationContextAware`接口提供了`setApplicationContext`方法...
"SpringBoot获取IOC容器中...在本文中,我们详细介绍了SpringBoot IOC容器中获取注入的Bean对象的方式和Bean对象的生命周期。通过这些知识点,我们可以更好地理解和使用SpringBoot框架,提高应用程序的开发效率和质量。
这样,Spring会自动将配置文件中的值注入到bean中。 7. **Spring Boot测试**: 在测试场景下,可以使用`@SpringBootTest`注解启动整个Spring Boot应用,然后使用`@Autowired`注入需要的bean进行测试。 8. **Bean...
总结来说,Spring提供多种方式让我们在应用中获取Bean,包括直接通过名称、类型,或者利用注解实现自动装配。了解这些机制,有助于我们更好地理解和使用Spring框架,提高代码的可维护性和灵活性。同时,源码分析能...
首先,通过实现ApplicationListener接口,可以在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象。ApplicationListener是一个事件监听器接口,用于监听Spring容器中的事件。ContextRefreshedEvent是一个...
属性赋值阶段,Spring容器会将Bean定义中配置的属性值设置到Bean实例上。在这个过程中,容器会考虑属性值的依赖关系,并按需注入其他Bean或设置具体的值。 3. 初始化(Initialization) 初始化阶段是指Bean已经实例...
实现方法的主要思想是使用spring框架提供的ApplicationContextAware接口来获取spring容器中的对象。这个接口提供了获取ApplicationContext对象的方法,从而可以使用ApplicationContext对象来获取spring容器中的对象...
这样,我们就可以在普通类中获取 applicationContext 对象。 ```java package me.shijunjie.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; ...
本文将深入探讨如何在Java程序中获取Spring框架中配置的bean。 首先,我们来理解一下Spring框架的基本概念。Spring是一个轻量级的框架,其核心特性包括控制反转(Inversion of Control, IoC)和面向切面编程...
自定义作用域需要实现ApplicationContextAware接口来获取ApplicationContext,并通过实现Scope接口来定义作用域的行为。 理解并正确使用Bean的作用域是优化Spring应用程序性能和资源管理的关键。选择合适的作用域...
默认情况下,Bean的scope为"singleton",表示Spring容器只创建一个实例,并将其缓存。如果scope设为"prototype",每次请求都会创建一个新的Bean实例。 7. **销毁**:当容器关闭时,如果是"singleton"作用域的Bean,...
Spring通过ApplicationContext主动获取bean的...通过使用ApplicationContext,我们可以轻松地获取到Spring容器中的bean,并且可以根据需要来获取不同的bean。这个方法可以帮助我们更好地管理和使用Spring容器中的bean。
在服务器启动后,Spring容器初始化完成,我们可以通过以下代码获取Bean: ```java WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); Object beanInstance = wac.getBean(beanID); ``...
三、在JUnit测试中获取bean对象 在JUnit测试中,我们可以使用ClassPathXmlApplicationContext来获取ApplicationContext对象,然后使用getBean方法来获取bean对象。代码如下: @Test public void test() throws ...
在Spring容器中,Bean的生命周期还包括容器感知的初始化和销毁,例如ApplicationContextAware接口允许Bean获取到容器引用,而ApplicationEventPublisherAware接口使Bean能够发布和监听应用事件。 总的来说,Spring ...