spring取得通過配置文件和注解注入的bean、取得當前數據庫連接、取得ApplicationContext的方法


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);  
      
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM