Spring 上下文

一、WebApplicationContext(父子上下文)

      Spring会创建一个WebApplicationContext上下文,称为父上下文(父容器),保存在ServletContext中,每个DispatcherServlet有一个自己的上下文对象(WebApplicationContext)称为子上下文(子容器)。

  WebApplicationContext webApplicationContext =             
               ContextLoader.getCurrentWebApplicationContext();

   ServletContext context = webApplicationContext.getServletContext();

        webApplicationContext.getBean("xx")

二、使用ClassPathXmlApplicationContext()

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

       使用new ClassPathXmlApplicationContext() 它会重新装载applicationContext.xml并实例化上下文bean,如果有些线程配置类也是在这个配置文件中,那么会造成做相同工作的的线程会被启两次。一次是web容器初始化时启动,另一次是上述代码显示的实例化了一次。当于重新初始化一遍!!!!这样就产生了冗余。

三、ApplicationContextAware接口

      从已有的spring上下文取得已实例化的bean,通过ApplicationContextAware接口进行实现。当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。

package com.jeeplus.modules.sys.service;

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

/**
 * 获取spring上下文
 * 
 * @author Administrator
 *
 */
@Component
@Lazy(false)
public class ApplicationContextUtils implements ApplicationContextAware {

	private static ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {

		ApplicationContextUtils.applicationContext = applicationContext;
	}

	public static ApplicationContext getApplicationContext() {

		return applicationContext;
	}

	/**
	 * 通过名称获取bean
	 * 
	 * @param name
	 * @return
	 */
	public static Object getBean(String name) {

		return applicationContext.getBean(name);
	}

	/**
	 * 通过类获取bean
	 * 
	 * @param clazz
	 * @return
	 */
	public static Object getBean(Class clazz) {

		return applicationContext.getBean(clazz);
	}

}

 

你可能感兴趣的:(spring)