`
floys1987
  • 浏览: 14650 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

当web中应用spring框架时,获得spring初始化的bean和ServletContext

阅读更多
这些天,一直在边学习,边做东西,发现,慢慢的补上了不少知识。今天发现了一个很有用的技巧,希望能给不知道的人,一点帮助。

当在web启动后,spring已经初始化的bean,已经按照你的约束注入了。那么如何获取那些sigleton 的bean。 网上说, 可以用servlet来做,其实没有必要。

第一种方法,慢一般是300+ms,可以说是多费一道手,不过,还是记录下来,也许有点意义。

public class SpringBeans{
        private static ApplicationContext factory;
	private static ServletContext sc ;


	private static final String APPLICATION_CONTEXT = "\\WEB-INF\\applicationContext.xml";
	private static final String DAO_CONTEXT = "\\WEB-INF\\daoHibernateContext.xml";

	public static Object getBean(String beanID){
		factory = getFactory();
		return factory.getBean(beanID);
	}
	
	private static ApplicationContext getFactory(){
		sc = MyServletContext.getServletContext();
		String aAC = sc.getRealPath(APPLICATION_CONTEXT);
		String aDC = sc.getRealPath(DAO_CONTEXT);
		ApplicationContext tmpfactory = new FileSystemXmlApplicationContext(
				new String[] { aAC , aDC});
		return tmpfactory;
	}
}
// 当你取得的时候可以这样用

        (Object)bean = (Object)SpringBeans.getBean(beanID);



这种做法,是我第一次的方法,后来,经过猛看javaDoc,又发现了一个好东西,(希望大家以后做东西也能猛看javaDoc,按照名字去看,也许你会找到些什么,虽然多数时候是迷茫)

import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;

    WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
    wac.getBean(beanID);


WebApplicationContext 应该就是spring的sevlet(也许是linstener或别的,这方面我的基本功还不够,也许说错哦)启动后加载到servletContext中的东西。你"."一下这个对象你会发现,你想获得的好多东西都出来了。而且,再速度上好过第一种方法,它的获取速度,在用
两次System.currentTimeMills()计时时,得出的结果是0ms。

希望对没有找到答案,或是正在找这个答案的人有帮助。还有,它还能获得web程序的servletContext。
WebApplicationContext wac..;
wac.getServletContext();

分享到:
评论
9 楼 scholers 2010-03-14  
载入的BEAN要依赖外部传入的BEAN参数的话,如何来解决呢?
8 楼 piranha 2010-02-23  
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();  
    wac.getBean(beanID);

这个方法太适用了,感谢啊
7 楼 youaretheboy 2010-02-09  
非常感谢,项目正需要用到第二种方法。。。。
6 楼 mrjamesli 2010-02-07  
其实还有一个好冬冬
org.springframework.web.context.support.ServletContextAttributeExporter
通过attributes属性,可以将你定义的bean,直接作为web的application scope的属性
5 楼 wptc 2010-02-07  
学习了,看来应该回去好好看下spring了
4 楼 floys1987 2009-09-25  
原来还有人回帖,谢谢
3 楼 towne 2009-06-10  
public class TestAware implements ApplicationContextAware {
	ApplicationContext ac;
	public TestAware(){
		
	}
	public ApplicationContext getAc() {
		return ac;
	}
	public void setAc(ApplicationContext ac) {
		this.ac = ac;
	}
	public TestAware(ApplicationContext ac){
			this.ac = ac;
	}
	public void setApplicationContext(ApplicationContext ac)
			throws BeansException {
		// TODO Auto-generated method stub
		this.ac  = ac;
	}

}
在配置中加入
    <!-- 测试Aware
    <bean id ="aaaaa" class="com.xxx.tesxt.TestAware"/> 
    --> 
使用
    public void test253(){
    	//Aware 接口取得应用程序上下文
    	TestAware ta = (TestAware)context.getBean("aaaaa");
    	System.out.print(ta.getAc().getBean(beanID));
    }
2 楼 sundoctor 2009-06-09  
你的第一种方法获取bean当然慢了,因为你获取的bean并不是web启动时spring已经初始化的bean,而是你通过ApplicationContext tmpfactory = new FileSystemXmlApplicationContext( new String[] { aAC , aDC})又重新初始化了一次获取的bean,获取bean慢是因为时间主要花在初始化上了,而且这样取出来的bean与web启动时spring已经初始化的bean是两个东东
1 楼 mmt 2009-06-05  
太好了,我正在满世界寻找!谢谢!

相关推荐

    在Servlet直接获取Spring框架中的Bean.docx

    当我们在Servlet环境中工作时,有时需要在Servlet中直接访问由Spring管理的Bean,以便利用Spring提供的服务和功能。以下是如何在Servlet中直接获取Spring框架中的Bean的方法。 首先,我们理解Spring容器,即...

    Spring源码学习七:web应用自动装配Spring配置文件1

    在Spring框架中,当我们将它应用于Web应用程序时,需要进行特殊的配置来自动加载Spring的配置文件。本文主要围绕"Spring源码学习七:web应用自动装配Spring配置文件1"这一主题,详细解析Web环境中Spring的初始化过程...

    spring在web.xml中和在struts中的不同配置..pdf

    总结来说,Spring在`web.xml`中的配置更加独立,它不依赖于任何特定的应用框架,而是在Web应用启动时独立初始化ApplicationContext。而在Struts中,Spring作为插件集成,依赖于Struts的执行流程来管理Bean。这两种...

    Spring框架初始化解析

    Spring框架初始化解析是指在使用Spring框架时,如何正确地初始化和加载Spring框架的配置和Bean容器。Spring框架的初始化过程是由Spring容器加载和管理的,通过使用不同的加载方式和Bean生命周期回调方法,来实现对...

    Spring框架系列(13) - SpringMVC实现原理之DispatcherServlet的初始化过程.doc

    DispatcherServlet 首先是一个 Servlet,Servlet 有自己的生命周期的方法(init、destory 等),那么我们在看 DispatcherServlet 初始化时首先需要看源码中 DispatcherServlet 的类结构设计。 DispatcherServlet 的...

    Spring源代码解析(二):IoC容器在Web容器中的启动.doc

    当Web容器启动时,Spring的初始化过程会创建`XmlWebApplicationContext`实例,并调用`refresh()`方法来加载bean定义。这个过程主要由`loadBeanDefinitions()`方法完成,它使用`XmlBeanDefinitionReader`来解析XML...

    SSH笔记-web应用下使用Spring

    在Web环境中,Spring可以通过多种方式初始化和管理Bean,其中一种常见的方式是通过Web应用上下文(WebApplicationContext)。 1. **配置Listener类**: 你可以创建一个实现了ServletContextListener接口的自定义...

    在Eclipse 中创建Spring的 Web应用.doc

    在Eclipse中创建一个基于Spring的Web应用...通过以上步骤,你可以在Eclipse中成功创建一个基于Spring的Web应用,并配置好Spring的初始化和配置文件加载。这为后续的控制器、服务层、数据访问层等组件的开发奠定了基础。

    Spring在容器在启动的时候发生了什么

    在Spring框架中,当一个基于Servlet的Web应用启动时,Spring容器的初始化过程是至关重要的。这个过程涉及到多个组件和步骤,让我们详细探讨一下。 首先,我们在`web.xml`配置文件中看到了`&lt;context-param&gt;`和`...

    spring在web.xml中和在struts中的不同配置.[收集].pdf

    通常,`ContextLoaderListener`被认为更优,因为它在Web应用启动时立即初始化ApplicationContext,确保所有依赖于Spring的组件都能及时获得所需的Bean。而`ContextLoaderServlet`可能会因为启动延迟导致依赖关系的...

    Spring系列面试题129道(附答案解析)

    Spring的WEB模块提供了构建Web应用程序的基础架构,包括支持多部分文件上传、使用Servlet监听器初始化IoC容器以及集成Spring MVC。 70、解释Spring配置文件。 Spring配置文件是一个XML文件,它包含了应用程序中Bean...

    Spring2.5中文手册

    - Spring管理的Bean有创建、初始化、配置、销毁等生命周期阶段,开发者可以通过实现接口或使用注解自定义生命周期行为。 - 2.5版本对生命周期回调方法进行了优化,增加了更多的回调接口和注解。 8. **国际化与...

    org.springframework.context_3.0.5.release.jar.zip

    3. WebApplicationContext:这是Web应用中的ApplicationContext,它与Servlet容器集成,可以访问ServletContext。 三、Bean的生命周期管理 ApplicationContext负责bean的创建、初始化、装配以及销毁。通过XML配置...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.6.1. 设置Bean使自动装配失效 3.3.7. 依赖检查 3.3.8. 方法注入 3.3.8.1. Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. ...

    获取spring容器的方法

    这样做可以让Spring在初始化时自动注入`ApplicationContext`。只需重写`setApplicationContext`方法: ```java public class SpringConfigTool implements ApplicationContextAware { private static ...

    web.xml中ContextLoaderListener的运行过程解析

    它的主要职责是在Web应用启动时创建并初始化Spring的全局ApplicationContext,这个ApplicationContext存储了整个Web应用的所有Bean。 ### 3. `ContextLoaderListener`在`web.xml`中的配置 在`web.xml`中,我们需要...

    Spring框架笔记

    1. **使用ServletContext监听器**:通过配置监听器,可以在Web应用启动时自动加载Spring配置文件,从而初始化相关的Bean。 2. **实现思想**:确保所有配置工作都在服务器启动时完成,这样可以提高应用程序的运行效率...

    Java获取Bean的几种方式.pdf

    实现这个接口,Spring会在初始化时自动调用`setApplicationContext(ApplicationContext context)`方法,将ApplicationContext注入到Bean中。 ```java public class MyService implements ...

    Spring获取ApplicationContext对象工具类的实现方法

    值得注意的是,在Web应用中,通常推荐使用ServletContextListener来初始化ApplicationContext,并将其存储在ServletContext中供整个应用使用。这样可以更加高效和方便地管理ApplicationContext的生命周期,并且能够...

Global site tag (gtag.js) - Google Analytics