search

Home  >  Q&A  >  body text

java - 使用setApplicationContext出现运行错误,求解!

PHPzPHPz2912 days ago532

reply all(4)I'll reply

  • PHP中文网

    PHP中文网2017-04-18 10:10:53

    In fact, you don’t need to use this tool class, just use it when you need it getBean的类注入一个ApplicationContext.

    @Autowired
    private ApplicationContext context;
    
    ...
    
    context.getBean("bean name");

    reply
    0
  • ringa_lee

    ringa_lee2017-04-18 10:10:53

    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);  
       }  
     }

    reply
    0
  • 黄舟

    黄舟2017-04-18 10:10:53

    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)

    The poster’s project didn’t start successfully at all. There should be other error messages. Take a closer look at the stack above listenerStop -> closeWebApplicationContext This error occurs when stopping Tomcat.

    reply
    0
  • PHP中文网

    PHP中文网2017-04-18 10:10:53

    Just complete the xsi in datasource.xml.

    reply
    0
  • Cancelreply