java - 使用setApplicationContext出现运行错误,求解!
PHPz
PHPz 2017-04-18 10:08:53
0
4
525
PHPz
PHPz

学习是最好的投资!

Antworte allen(4)
洪涛

其实可以不用用到这个工具类,在需要getBean的类注入一个ApplicationContext即可。

@Autowired
private ApplicationContext context;

...

context.getBean("bean name");
左手右手慢动作
package com.alibaba.tboss.util;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
 
/**
 * 
 * ClassName: SpringContextUtil <br/>
 * Function: 在applicationContext.xml中加入配置 
 *           <bean id="SpringContextUtil" class="com.alibaba.tboss.util.SpringContextUtil"/>
 *           用来得到spring配置的Bean <br/>
 * date: 2015年12月31日 <br/>
 */
public class SpringContextUtil implements ApplicationContextAware {  
   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);  
   } 
   
   /**
    * 
    * getBean: 获取类型为requiredType的对象 . <br/>
    *
    * @param requiredType 返回对象类型 
    * @return 返回requiredType类型对象 
    */
   public static <T> T getBean(Class<T> requiredType) {
       return applicationContext.getBean(requiredType);
   }
    
   /** 
   * 获取类型为requiredType的对象 
   * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException) 
   * @param name       bean注册名 
   * @param requiredType 返回对象类型 
   * @return Object 返回requiredType类型对象 
   * @throws BeansException 
   */  
public static <T> T getBean(String name, Class<T> 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 
   */  
   @SuppressWarnings("rawtypes")
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);  
   }  
 }
黄舟
java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
    at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:170)
    at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:921)
    at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:841)
    at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:579)
    at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:115)
    at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4858)

楼主的项目根本没启动成功吧,应该还有其它的错误信息。仔细看上面的堆栈 listenerStop -> closeWebApplicationContext 这个错误是在停止Tomcat的时候发生的错误。

洪涛

将datasource.xml中xsi补全了就好了。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage