赞
踩
- package com.muxue.common.util;
-
- import org.springframework.beans.BeansException;
- import org.springframework.beans.factory.DisposableBean;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.ApplicationContextAware;
- import org.springframework.stereotype.Component;
-
- /**
- * 持有spring上下文的工具类,一个系统只有一个SpringContextHolder
- * <p>该工具类主要用于:通过spring上下文获取bean</p>
- */
- @Component
- public class SpringContextHolder implements ApplicationContextAware, DisposableBean {
- private static ApplicationContext applicationContext;
- @Override
- public void setApplicationContext(ApplicationContext context) throws BeansException {
- if(applicationContext!=null) throw new IllegalStateException("applicationContext 上下文已存在");
- System.out.println("spring注入上下文");
- applicationContext=context;
- }
-
- private static ApplicationContext getApplicationContext() {
- return applicationContext;
- }
- /**
- * 本类SpringContextHolder 被销毁时,将spring上下文置空
- * @throws Exception
- */
- @Override
- public void destroy() throws Exception {
- applicationContext=null;
- }
-
- /**
- * 根据类型获取ioc容器中的bean
- * @param clazz
- * @param <T>
- * @return
- */
- public static <T> T getBean(Class<T> clazz){
- return getApplicationContext().getBean(clazz);
- }
- /**
- * 根据beanName获取bean
- * @param beanName
- * @return
- */
- public static <T> T getBean(String beanName) {
- return (T)getApplicationContext().getBean(beanName);
-
- }
- }
当一个类实现了ApplicationContextAware之后,这个类就可以方便获得ApplicationContext中的所有bean,这个类可以直接获取spring配置文件中,所有有引用到的bean对象。
setApplicationContext是Spring框架预留的一个关键的钩子方法,spring详细加载全过程如下:
加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的setApplicationContext,自动的将ApplicationContext注入进来。
在ApplicationContextAware的实现类中,就可以通过这个上下文环境对象得到Spring容器中的Bean。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。