一:使用ApplicationContext获得Bean
首先新建一个类,该类必须实现ApplicationContextAware接口,改接口有一个方法,public void
setApplicationContext(ApplicationContext applicationContext)throws
BeansException ,
也就是说框架会自动调用这个方法返回一个ApplicationContext对象。具体类如下:
-
public
class
SpringContextUtils
implements
ApplicationContextAware{
-
-
private
static
ApplicationContext applicationContext =
null
;
-
-
-
-
-
-
public
void
setApplicationContext(ApplicationContext applicationContext)
throws
BeansException {
-
SpringContextUtils.applicationContext = applicationContext;
-
}
-
public
static
ApplicationContext getApplicationContext() {
-
return
applicationContext;
-
}
-
-
-
-
-
-
-
public
static
Object getBean(String name)
throws
BeansException {
-
return
applicationContext.getBean(name);
-
}
-
-
-
-
-
-
-
-
public
static
Object getBean(String name, Class requiredType)
throws
BeansException {
-
return
applicationContext.getBean(name, requiredType);
-
}
-
-
-
-
-
-
-
public
static
boolean
containsBean(String name) {
-
return
applicationContext.containsBean(name);
-
}
-
-
-
-
-
-
-
-
-
public
static
boolean
isSingleton(String name)
throws
NoSuchBeanDefinitionException {
-
return
applicationContext.isSingleton(name);
-
}
-
-
-
-
-
-
-
public
static
Class getType(String name)
throws
NoSuchBeanDefinitionException {
-
return
applicationContext.getType(name);
-
}
-
-
-
-
-
-
-
-
public
static
String[] getAliases(String name)
throws
NoSuchBeanDefinitionException {
-
return
applicationContext.getAliases(name);
-
}
-
}
该类中有一个getBean(String name)方法,该方法用applicationContext去获得Bean实例,而applicationContext
是由系统启动时自动设置的。注意,在applicationContext.xml配置文件中需要把该类加上。<bean id="springUtils" class="en.estar.utils.SpringContextUtils"/>
二:通过BeanFactory接口获得Bean
也是新建一个类,不过该类需要实现BeanFactoryAware接口,该接口有一个方法public void
setBeanFactory(BeanFactory beanFactory) throws
BeansException;该方法是为了设置BeanFactory对象,系统会在启动的时候自动设置BeanFactory。具体代码如下:
-
public
class
SpringBeanFactoryUtils
implements
BeanFactoryAware {
-
-
private
static
BeanFactory beanFactory =
null
;
-
private
static
SpringBeanFactoryUtils factoryUtils =
null
;
-
-
public
void
setBeanFactory(BeanFactory beanFactory)
throws
BeansException {
-
SpringBeanFactoryUtils.beanFactory = beanFactory;
-
}
-
public
static
BeanFactory getBeanFactory() {
-
return
beanFactory;
-
}
-
public
static
SpringBeanFactoryUtils getInstance(){
-
if
(factoryUtils==
null
){
-
-
factoryUtils = new
SpringBeanFactoryUtils();
-
}
-
return
factoryUtils;
-
}
-
public
static
Object getBean(String name){
-
return
beanFactory.getBean(name);
-
}
-
}
不过应该注意的是,改类中有一个getInstance方法,由于该代码是网上摘抄的,他提供了这么一个方法,目的是利用单例模式获得
该
类的一个实例,但由于getBean(String
name)方法是静态的,所以用不用单例都无关紧要,经过测试,两种方法都行的通。另外一点就是必须把该类添加到
applicationContext.xml的配置文件中<bean id="springBeanFactoryUtils"
class="en.estar.utils.SpringBeanFactoryUtils"/>
三:在servlet中可以用WebApplicationContext类去获取Bean,具体做法是:
-
WebApplicationContext webcontext = (WebApplicationContext)context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
其中
context
是servlet的上下文,在servlet中可以通过this.getServletContext()或者
request.getSession().getServletContext();获得servletContext。但是一点,spring的配置
文件必须在WEB-INF下。
WebApplicationContext 有一个方法getBean(String name);其实WebApplicationContext 就是ApplicationContext的另一种形式而已。
另外,在普通的java类中,即不是在servlet中可以用ContextLoader获得。ContextLoader是org.springframework.web.context包当中的一个类。
-
private
static
WebApplicationContext webApplication = ContextLoader.getCurrentWebApplicationContext();
用这种方法就能获取一个WebApplicationContext 的对象。
最后经过测试,在重复100000次的基础上,第一二中方法只用了16毫秒,而第三种方法消耗了62毫秒,所以推荐使用第一二种方法
尊重版主,原文地址:http://littie1987.iteye.com/blog/937877
分享到:
相关推荐
通过aware接口,可以对spring相应...首先创建一个类,实现ApplicationContextAware接口 , 该借口需要实现 setApplicationContext方法,该方法的参数由容器传递进来。 这样,bean 就获得了ApplicationContext这个资源
(6)如果BeanPostProcessor和Bean关联,则Spring将调用该接口的预初始化方法postProcessBeforeInitialzation()对Bean进行加工操作,这个非常重要,Spring的AOP就是用它实现的。 (7)如果Bean实现了...
ApplicationContext的Bean的生命周期
spring 获得applicationcontext公用方法
主要介绍了 Spring获取ApplicationContext对象工具类的实现方法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
今天小编就为大家分享一篇关于Spring通过ApplicationContext主动获取bean的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
ApplicationContext及它的3种实现
这个工程主要实现了: Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)
NULL 博文链接:https://canfly2010.iteye.com/blog/443063
springboot 通过 ApplicationContextAware、ApplicationContext获取spring管理的bean-附件资源
applicationContext applicationContext
该类必须继承com.hikvision.swdf.xx.BaseAction<{EntityName}>,该Action类有一个关键属性entity,即泛型Entity类的一个实体,该属性默认填充好了请求提交过来的entity对应参数(即entity.propertyName);...
spring的Applicationcontext对事件的监听,在一个applicationContext范围内,实现类似MQ的效果
56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。 14 59、Java 编程,打印昨天的当前时刻。 15 60、java 和javasciprt 的区别。 15 61、什么时候用assert? 16 62、error和exception有什么...
因此,我们有2种配置,它们使用名称beanName实例化bean,在主应用程序中,我们仅打印该bean的值(非常重要的是,它们都具有相同的名称)。 那么您认为将要打印什么? 示例1 @SpringBootApplication public class ...
bean加入spring容器管理的方式,bean加入applicationcontext容器的方式
ade 接口,但这个接口是暴露给 Servlet 使用的,最好能再为 Flex 定义另一个接口 FlexService,并隐藏 Java 语言的特定对象(如 清单 1 所示): 清单 1. FlexService interface public interface FlexService ...
Spring Web MVC开发 xml配置文件格式,无bean之类 Spring Web MVC开发配置文件 applicationContext
2.ClassPathXmlApplicationContext是一个类,实现了上述功能 3.ApplicationContext的顶层接口是BeanFactory 4.BeanFactory定义了bean相关的最基本操作 5.ApplicationContext在BeanFactory基础上追加了若干新功能...