[java][spring]取得通過配置檔案和註解注入的bean、取得當前資料庫連線、取得ApplicationContext的方法
阿新 • • 發佈:2019-01-10
[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);
}