日期:2014-05-16  浏览次数:20540 次

[java][spring]Spring通过ApplicationContextAware获得bean的方法、获取数据库连接的方法、获取ApplicationContext

Spring通过ApplicationContextAware获得bean的方法、获取数据库连接的方法、获取ApplicationContext

1、思路:

应用程序启动时使用ApplicationContextAware让Spring容器传递自己生成的ApplicationContext给我们, 然后我们把这个ApplicationContext设置成一个类的静态变量, 这样我们就随时都可以在老的代码里得到Application的对象了。

1、编写工具类: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 );  
    }  
} 

2、在Spring的配置文件中配置上述类后、应用程序启动时会使用ApplicationContextAware让Spring容器传递自己生成的ApplicationContext给我们, 然后我们把这个ApplicationContext设置成一个类的静态变量, 这样我们就随时都可以在老的代码里得到Application的对象了。

<bean id="SpringApplicationContext" class="com.huaxin.framework.core.util.ApplicationContextHelper"></bean>

3、获得bean的方法、获取数据库连接的方法、获取ApplicationContext

		//取得数据源
		DruidDataSource dataSource = (DruidDataSource)ApplicationContextHelper.getBean("dataSource");
		Connection connection = DataSourceUtils.getConnection(dataSource);

		//取得ApplicationContext
		ApplicationContext ctx = ApplicationContextHelper.getApplicationContext();