[java][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);
		
	}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值