標籤:
轉載自:http://penghuaiyi.iteye.com/blog/2042296
情境:
在代碼中需要動態擷取spring管理的bean
代碼:
SpringContextUtils.java
package com.winner.utils;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;/** * Spring的工具類,用來獲得設定檔中的bean */@Componentpublic class SpringContextUtils implements ApplicationContextAware { private static ApplicationContext applicationContext; /** * 當繼承了ApplicationContextAware類之後,那麼程式在調用 getBean(String)的時候會自動調用該方法, * 不用自己操作 */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextUtils.applicationContext = applicationContext; } /*** * 根據一個bean的id擷取設定檔中相應的bean */ public static Object getBean(String beanId) throws BeansException { if (applicationContext.containsBean(beanId)) { applicationContext.getBean(beanId); } return null; } /*** * 根據一個bean的類型擷取設定檔中相應的bean */ public static <T> T getBeanByClass(Class<T> requiredType) throws BeansException { return applicationContext.getBean(requiredType); } /** * 如果BeanFactory包含一個與所給名稱匹配的bean定義,則返回true */ public static boolean containsBean(String name) { return applicationContext.containsBean(name); } public static ApplicationContext getApplicationContext() { return SpringContextUtils.applicationContext; }}
這幾個註解所在的包是
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.5.RELEASE</version></dependency>
SpringContextUtils必須放在Spring容器中
要麼在xml設定檔中聲明,要麼加上註解
通過實現ApplicationContextAware介面動態擷取bean