zoukankan      html  css  js  c++  java
  • spring 框架通过new Object()获取applicationContext 中的bean方案

    工作中,需要手动创建一个对象,但用到了spring容器中对象的业务逻辑,这时候就要去通过获取容器中的对象。这时候,可以通过实例化一个实现了ApplicationContextAware接口的类获取spring容器对象,从而获取容器中的bean。

    直接上代码,如下:

    package com.blue.forum.context;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.NoSuchBeanDefinitionException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.core.ResolvableType;
    
    /**
     * @ClassName: ServletContextHolder
     * @author 
     * @date 2015年12月9日 下午6:23:17
     */
    public class AppContext implements ApplicationContextAware {
        protected static ApplicationContext context;
        
        
    
        public AppContext() {
            super();
            System.out.println("------------初始化");
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void setApplicationContext(ApplicationContext context) throws BeansException {
            System.out.println("初始化http.xml的 context================:"+context.toString()+"class:"+context.getApplicationName());
    
            if (null == AppContext.context) AppContext.context = context;
        }
    
        public static ApplicationContext getContext() {
            return AppContext.context;
        }
    
        public static final Object getBean(String name) throws BeansException {
            return AppContext.context.getBean(name);
        }
    
        public static final <T> T getBean(String name, Class<T> requiredType) throws BeansException {
            return AppContext.context.getBean(name, requiredType);
        }
    
        public static final <T> T getBean(Class<T> requiredType) throws BeansException {
            return AppContext.context.getBean(requiredType);
        }
    
        public static final Object getBean(String name, Object... args) throws BeansException {
            return AppContext.context.getBean(name, args);
        }
    
        public static final <T> T getBean(Class<T> requiredType, Object... args) throws BeansException {
            return AppContext.context.getBean(requiredType, args);
        }
    
        public static final boolean containsBean(String name) {
            return AppContext.context.containsBean(name);
        }
    
        public static final boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
            return AppContext.context.isSingleton(name);
        }
    
        public static final boolean isPrototype(String name) throws NoSuchBeanDefinitionException {
            return AppContext.context.isPrototype(name);
        }
    
    
        public static final Class<?> getType(String name) throws NoSuchBeanDefinitionException {
            return AppContext.context.getType(name);
        }
    
        public static final String[] getAliases(String name) {
            return AppContext.context.getAliases(name);
        }
    }

    值得注意的是,当项目启动的时候必须对此类进行实例化,否则使用时可能会出现空指针异常,即拿不到容器对象。

    稳妥的配置如下:

    <bean class="com.blue.forum.context.AppContext" lazy-init="false"></bean>

    这样,妈妈再也不用担心由于懒加载出现的拿不到对象的问题了。

  • 相关阅读:
    World file文件格式
    HTML5 基础
    Spring Framework---概况
    Tomcat(1)
    警言妙句
    嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
    关键字volatile有什么含意?并给出三个不同的例子。
    关键字const有什么含意?
    关于指针数组、数组指针、指针函数、函数指针等的问题
    实现两个int变量的值的交换,要求不使用临时变量。
  • 原文地址:https://www.cnblogs.com/sloveling/p/application_context_aware.html
Copyright © 2011-2022 走看看