如何在Web启动时获取Spring 上下文环境

问题如题,本文给出一个解决方案,满足以下要求:

(1)Web启动时能自动获取Spring 的上下文,从而用户可以随意的获取其中的Bean。

(2)在单文件测试环境中,亦可以根据配置文件路径加载Spring上下文。

大致原理为:

Spring 启动时,会给任何一个实现了ApplicationContextAware接口的Bean(也可以叫做类),注入一个构造函数参数:applicationContext。

有了这样的一个类,就可以在自己的代码里轻松的获取上下文了。

编写这样的一个类还有个好处,那就是,对于类被调用时,没有通过web启动的方式(那么也就不会注入),根据上下文对象判空可以判断。

这样的一个类的源码为:

import org.apache.tiles.velocity.template.GetAsStringDirective;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class MyBeanFactory implements ApplicationContextAware{

	public static ApplicationContext context = null;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
	{
		if(context==null)
		{
			context =applicationContext;
		}
		System.out.println("ApplicationContext setter is called...");
	}

	public static ApplicationContext getApplicationContext() {

			if(context==null)
			{ //本地调试
				context = new FileSystemXmlApplicationContext("/WebContent/WEB-INF/config/spring-context.xml");
			}
	     	return context;

	}

	public static Object getBean(String name)
	{
		if(context==null)
		{
			context = getApplicationContext();
		}
		return context.getBean(name);
	}
}

时间: 2024-10-09 12:57:24

如何在Web启动时获取Spring 上下文环境的相关文章

如何在tomcat启动时加载一个类

Tomcat启动时classloader加载顺序 Tomcat的class加载的优先顺序一览   1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件.   2.环境变量CLASSPATH中的jar和class文件.   3.$CATALINA_HOME/common/classes下的class文件.   4.$CATALINA_HOME/commons/endorsed下的jar文件.   5.$CATALINA_HOME/commons/i18n下的jar文件.   6.

普通java类在Tomcat启动时获取ServletContext

1.web.xml配置文件 <context-param> <param-name>messagePrefix</param-name> <param-value>需要在tomcat启动时获取的字符串</param-value> </context-param> 2.普通java类 1 import org.springframework.web.context.ContextLoader; 2 import org.springfr

JAVA获取Spring上下文

1. 添加监听 public class SpringContextListener implements ServletContextListener { //获取spring注入的bean对象 public static WebApplicationContext springContext; public void contextDestroyed(ServletContextEvent event) { //springContext = null; } /** * 获取spring上下

通过ApplicationContextAware加载Spring上下文环境

通过ApplicationContextAware加载Spring上下文环境 原创 2013年09月05日 18:15:44 标签: Spring / ApplicationContextAw 项目用到了ApplicationContextAware,通过它Spring容器会自动把上下文环境对象调用ApplicationContextAware接口中的setApplicationContext方法. 我们在ApplicationContextAware的实现类中,就可以通过这个上下文环境对象得到

在web项目中获取ApplicationContext上下文的3种主要方式及适用情况

最近在做web项目,需要写一些工具方法,涉及到通过Java代码来获取spring中配置的bean,并对该bean进行操作的情形.而最关键的一步就是获取ApplicationContext,过程中纠结和错误了很久,总结一下获取ApplicationContext的三种方式: 方式一:实现ApplicationContextAware接口 对于实现ApplicationContextAware接口的类,spring容器在初始化的时候会扫描他,并把容器的context环境注入给它.如下: 1 publ

基于Spring DM管理的Bundle获取Spring上下文对象及指定Bean对象

在讲述服务注册与引用的随笔中,有提到context.getServiceReferences()方法,通过该方法可以获取到OSGI框架容器中的指定类型的服务引用,从而获取到对应的服务对象.同时该方法还可以通过Bundle-SymbolicName名称获取到该Bundle中的Spring上下文对象,同样根据Spring上下文对象,我们也可以很好的获取到对应服务对象(服务对象,就是Spring中的一个Bean对象) String callName = "com.sample.service.IHel

如何在tomcat启动时自动加载一个类

有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以采用在WEB-INF/web.xml中添加一个监听程序(ServletContextListener配置项),步骤如下:1) 增加一个监听程序 MyServletContextListener.java, 实现javax.servlet.ServletContextListener接口 packag

五)Spring + Quartz 复杂业务的两个问题:获取Spring上下文 和 自动注入服务类

配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/

如何在Web项目中配置Spring MVC

要使用Spring MVC需要在Web项目配置文件中web.xml中配置Spring MVC的前端控制器DispatchServlet 1 <servlet> 2 <servlet-name>SpringMVC</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <!-- 默认所对应的配置文件是