一种获取spring环境上下文方法:SpringContextUtil

获得spring里注册Bean的有好几种方法,这里介绍一种比较简单的方法:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
 
/**
 *功能描述:获取spring容器,以访问容器中定义的其他bean 
 */
  /**  
 
public class SpringContextUtil implements ApplicationContextAware {

/** 
  * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. 
  *   
  *  
  */
        private static ApplicationContext applicationContext; //Spring应用上下文环境   
 
        /**  
         * 实现ApplicationContextAware接口的回调方法,设置上下文环境     
         * @param applicationContext  
         * @throws BeansException  
         */
        public void setApplicationContext(ApplicationContext applicationContext)
                        throws BeansException {
                SpringContextUtil.applicationContext = applicationContext;
        }
 
        /**  
         * @return ApplicationContext  
         */
        public static ApplicationContext getApplicationContext() {
                return applicationContext;
        }
 
        /**  
         * 获取对象     
         * @param name  
         * @return Object 一个以所给名字注册的bean的实例  
         * @throws BeansException  
         */
        public static Object getBean(String name) throws BeansException {
                return applicationContext.getBean(name);
        }
 
        /**  
         * 获取类型为requiredType的对象  
         * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)  
         * @param name       bean注册名  
         * @param requiredType 返回对象类型  
         * @return Object 返回requiredType类型对象  
         * @throws BeansException  
         */
        public static Object getBean(String name, Class requiredType)
                        throws BeansException {
                return applicationContext.getBean(name, requiredType);
        }
 
        /**  
         * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true   
         * @param name  
         * @return boolean  
         */
        public static boolean containsBean(String name) {
                return applicationContext.containsBean(name);
        }
 
        /**  
         * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。  
         * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)     
         * @param name  
         * @return boolean  
         * @throws NoSuchBeanDefinitionException  
         */
        public static boolean isSingleton(String name)
                        throws NoSuchBeanDefinitionException {
                return applicationContext.isSingleton(name);
        }
 
        /**  
         * @param name  
         * @return Class 注册对象的类型  
         * @throws NoSuchBeanDefinitionException  
         */
        public static Class getType(String name)
                        throws NoSuchBeanDefinitionException {
                return applicationContext.getType(name);
        }
 
        /**  
         * 如果给定的bean名字在bean定义中有别名,则返回这些别名     
         * @param name  
         * @return  
         * @throws NoSuchBeanDefinitionException  
         */
        public static String[] getAliases(String name)
                        throws NoSuchBeanDefinitionException {
                return applicationContext.getAliases(name);
        }
}

-------------------
调用:

UserService userService = (UserService) SpringContextUtil.getBean("userService");

上一篇:数值的整数次方 牛客网 剑指Offer


下一篇:牛客网——剑指offer(跳台阶以及变态跳台阶_java实现)