您的位置:首页 > 移动开发

[java][spring]取得通过配置文件和注解注入的bean、取得当前数据库连接、取得ApplicationContext的方法

2014-04-12 16:01 1106 查看
[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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐