美文网首页
bean中获取spring上下文(ApplicationCont

bean中获取spring上下文(ApplicationCont

作者: whoismy8023 | 来源:发表于2017-10-26 15:17 被阅读0次

    ApplicationContextAware是在org.springframework.context包下的一个接口,用于获取spring的上下文,顾名思义,可用通过这个接口获取到spring的上下文context,通俗的讲,就是能通过实现这个接口来获取到spring的IOC容器中的各个bean,具体实现如下两步。

    /**
      *ApplicationContextAware 接口定义
      */
    public abstract interface org.springframework.context.ApplicationContextAware {
      public abstract void setApplicationContext(org.springframework.context.ApplicationContext context) throws org.springframework.beans.BeansException;
    }
    

    1、通过这个接口的定义可以发现,实现本接口需要重写setApplicationContext方法。

    public class SMSContextInit  implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
        public ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        //重写接口中的方法
        public void setApplicationContext(ApplicationContext aContext) {
            applicationContext = aContext;
        }
        /**
         * 通过beanId得到factory中的bean实例
         * @param beanId
         * @return Object
         */
        public static Object getBean(String beanId) {
            Object obj = null;
            if (applicationContext != null)
                obj = applicationContext.getBean(beanId);
            return obj;
        }
    }
    

    2、在spring的配置文件中需要配置实现类给spring管理。

    <bean class="gnnt.MEBS.integrated.mgr.utils.SMSContextInit" />
    

    通过实现的过程不难发现,ApplicationContextAware获取上下文的步骤就是,先把实现类SMSContextInit 交给spring管理,是spring容器发现SMSContextInit 是ApplicationContextAware的实现类,则调用setApplicationContext方法把上下文的引用交给SMSContextInit 类来使用。


    另外:
    spring虽然提供了ApplicationContextAware接口来使用,但是从耦合性的层面上来看,实现这个接口相当于把实现类和spring框架严格的绑定在一起了,有违低耦合的思想。其实要实现低耦合的获取spring上下文也是可以实现的,ApplicationContextAware其实就是使用的setter注入的思想,那么获取上下文的操作同样可以用setter注入的方式来实现,代码改写如下:

    public class SMSContextInit {
        private static ApplicationContext applicationContext;
        public ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        //setter方法用来实现context的注入
        public void setApplicationContext(ApplicationContext aContext) {
            applicationContext = aContext;
        }
        /**
         * 通过beanId得到factory中的bean实例
         * @param beanId
         * @return Object
         */
        public static Object getBean(String beanId) {
            Object obj = null;
            if (applicationContext != null)
                obj = applicationContext.getBean(beanId);
            return obj;
        }
    }
    
    

    相关文章

      网友评论

          本文标题:bean中获取spring上下文(ApplicationCont

          本文链接:https://www.haomeiwen.com/subject/wtdkpxtx.html