Spring获取Bean的方式

这篇文章主要介绍“Spring获取Bean的方式”,在日常操作中,相信很多人在Spring获取Bean的方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring获取Bean的方式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在初始化时保存ApplicationContext对象

ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");  ac.getBean("userService"); #比如:<bean id="userService">

通过Spring提供的utils类获取ApplicationContext对象 

ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);  ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);  ac1.getBean("beanId");  ac2.getBean("beanId");   说明:这样的方式适合于採用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象。 然后在通过它获取须要的类实例。上面两个工具方式的差别是,前者在获取失败时抛出异常。后者返回null。

继承自抽象类ApplicationObjectSupport 

说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,能够方便的获取ApplicationContext。 Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。

继承自抽象类WebApplicationObjectSupport

说明:类似上面方法。调用getWebApplicationContext()获取WebApplicationContext

实现接口ApplicationContextAware

说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext对象注入。

package com.rkhd.ienterprise.isearch.util; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /**  * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext.  *   */ @Component public class SpringContextHolder implements ApplicationContextAware , DisposableBean {     private static ApplicationContext applicationContext = null;     private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class);     /**      * 取得存储在静态变量中的ApplicationContext.      */     public static ApplicationContext getApplicationContext() {         assertContextInjected();         return applicationContext;     }     /**      * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.      */     @SuppressWarnings("unchecked")     public static <T> T getBean(String name) {         assertContextInjected();         return (T) applicationContext.getBean(name);     }     /**      * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.      */     public static <T> T getBean(Class<T> requiredType) {         assertContextInjected();         return applicationContext.getBean(requiredType);     }     /**      * 清除SpringContextHolder中的ApplicationContext为Null.      */     public static void clearHolder() {         logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext);         applicationContext = null;     }     /**      * 实现ApplicationContextAware接口, 注入Context到静态变量中.      * @param applicationContext      * @throws BeansException      */     @Override     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {         logger.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext);         if (SpringContextHolder.applicationContext != null) {             logger.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:"                     + SpringContextHolder.applicationContext);         }         SpringContextHolder.applicationContext = applicationContext; //NOSONAR     }     /**      * 实现DisposableBean接口, 在Context关闭时清理静态变量.      * @throws Exception      */     @Override     public void destroy() throws Exception {     }     /**      * 检查ApplicationContext不为空.      */     private static void assertContextInjected() {         Validate.validState(applicationContext != null,                 "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");     } }

通过Spring提供的ContextLoader

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); wac.getBean(beanID);

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。