spring取得通過配置文件和注解注入的bean、取得當前數據庫連接、取得ApplicationContext的方法
1、思路:
應用程序啟動時使用ApplicationContextAware讓Spring容器傳遞自己生成的ApplicationContext給我們, 然后我們把這個ApplicationContext設置成一個類的靜態變量, 這樣我們就隨時都可以在老的代碼里得到Application的對象了。
2、編寫工具類:ApplicationContextHelper
/** * 版權所有:華信軟件 * 項目名稱:ACWS框架 * 創建者: Wangdf * 創建日期: 2014-4-2 * 文件說明: Spring工具欄 */ package com.huaxin.framework.core.util; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * Spring工具欄 * @author wangdf */ public class ApplicationContextHelper implements ApplicationContextAware { private static ApplicationContext appCtx; /** * 此方法可以把ApplicationContext對象inject到當前類中作為一個靜態成員變量。 * @param applicationContext ApplicationContext 對象. * @throws BeansException * @author wangdf */ @Override public void setApplicationContext( ApplicationContext applicationContext ) throws BeansException { appCtx = applicationContext; } /** * 獲取ApplicationContext * @return * @author wangdf */ public static ApplicationContext getApplicationContext(){ return appCtx; } /** * 這是一個便利的方法,幫助我們快速得到一個BEAN * @param beanName bean的名字 * @return 返回一個bean對象 * @author wangdf */ public static Object getBean( String beanName ) { return appCtx.getBean( beanName ); } }
3、在Spring的配置文件中配置上述類后、應用程序啟動時會使用ApplicationContextAware讓Spring容器傳遞自己生成的ApplicationContext給我們, 然后我們把這個ApplicationContext設置成一個類的靜態變量, 這樣我們就隨時都可以在老的代碼里得到Application的對象了。
<bean id="SpringApplicationContext" class="com.huaxin.framework.core.util.ApplicationContextHelper"></bean>
4、獲得bean的方法、獲取數據庫連接的方法、獲取ApplicationContext
4.1、取得通過Spring配置文件注入的任意Bean(以取得DataSource為例)
<!-- 配置dbcp數據源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method='init' destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="minIdle" value="${jdbc.minIdle}" /> <!-- 隊列中的最小等待數 --> <property name="maxWait" value="${jdbc.maxWait}" /> <!-- 最長等待時間,單位毫秒 --> <property name="maxActive" value="${jdbc.maxActive}" /> <!-- 最大活躍數 --> <property name="initialSize" value="${jdbc.initialSize}" /><!-- 初始大小 --> </bean>
/取得數據源 DruidDataSource dataSource = (DruidDataSource)ApplicationContextHelper.getBean("dataSource"); Connection connection = DataSourceUtils.getConnection(dataSource); //取得ApplicationContext ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();
4.2、取得通過注解方式注入的Bean(以在取得Service為例)
通過@Service("userTestService")定義bean
@Service("userTestService") public class UserTestServiceImpl implements UserTestService { @Autowired private UserTestDao userDao; @Transactional(propagation=Propagation.NOT_SUPPORTED) @Override public Map<String, Object> doGetRecordById() { return userDao.getRecordById("1"); } 。。。略。。。 }
通過以下代碼獲取Bean
/** * 測試Bean獲取 * @throws Exception */ @Test public void testGetBean() throws Exception{ //通過注解方式 UserTestService userTestService = (UserTestService)ApplicationContextHelper.getBean("userTestService"); System.out.println(userTestService); }