在使用Spring做IoC容器的时候,有的类不方便直接注入bean,需要手动获得一个类型的bean。

因此,实现一个获得bean实例的工具类,就很有必要。

以前,写了一个根据bean的名称和类型获取bean实例的2个工具方法,发现每次调用后,都需要强制转换成目标结果类型。

这样很不方便,突然想到可以使用Java泛型方法,实现1个新的工具方法,避免了类型转换。

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.stereotype.Service;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext; import cn.fansunion.webdemo.domain.User; /**
* 获取Spring容器中Bean实例的工具类(Java泛型方法实现)。
*
* @author leiwen@FansUnion.cn
*/
@Service
public class SpringBeanUtils implements BeanFactoryAware { private static BeanFactory beanFactory; /**
* 注入BeanFactory实例
*/
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
SpringBeanUtils.beanFactory = beanFactory;
} /**
* 根据bean的名称获取相应类型的对象
*
* @param beanName
* bean的名称
* @return Object类型的对象
*/
public static Object getBean(String beanName) {
return beanFactory.getBean(beanName);
} /**
* 根据bean的类型获取相应类型的对象,没有使用泛型,获得结果后,需要强制转换为相应的类型
*
* @param clazz
* bean的类型,没有使用泛型
* @return Object类型的对象
*/
public static Object getBean(Class clazz) {
WebApplicationContext wac = ContextLoader
.getCurrentWebApplicationContext();
Object bean = wac.getBean(clazz);
return bean;
} /**
* 根据bean的名称获取相应类型的对象,使用泛型,获得结果后,不需要强制转换为相应的类型
*
* @param clazz
* bean的类型,使用泛型
* @return T类型的对象
*/
public static <T> T getBean2(Class<T> clazz) {
WebApplicationContext wac = ContextLoader
.getCurrentWebApplicationContext();
T bean = wac.getBean(clazz);
return bean;
} // 用法演示
public static void main() {
// 需要强制转换,不够便捷
Class o1 = (Class) SpringBeanUtils.getBean2(Class.class); // 需要强制转换,不够便捷
User user = (User) SpringBeanUtils.getBean("user"); // 不用强制转换--推荐使用
User user2 = SpringBeanUtils.getBean2(User.class);
}
}

好处:避免强制转换,比较方便,可读性更好。调用次数越多,节省的开发时间也越多。

相关阅读提高生产力

http://blog.csdn.net/fansunion/article/category/1572687

原文链接http://FansUnion.cn/articles/3313(小雷网-FansUnion.cn)

获取Spring容器中Bean实例的工具类(Java泛型方法实现)的更多相关文章

  1. 获取Spring容器中的Bean协助调试

    在使用Spring进行开发时,有时调bug真的是很伤脑筋的一件事,我们可以通过自定义一个监听器来获取Spring容器中的Bean实例来协助我们调试. 第一步:编写自定义监听器 /** * 监听serv ...

  2. 【sping揭秘】3、Spring容器中bean默认是保持一个实例

    Spring容器中bean默认是保持一个实例 这里做一个测试,基础代码 package cn.cutter.start.provider; import org.springframework.con ...

  3. SpringBoot 之 普通类获取Spring容器中的bean

    [十]SpringBoot 之 普通类获取Spring容器中的bean   我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器 ...

  4. java web中如何获取spring容器中定义的bean----WebApplicationContext的使用

    本文简单编写一个servlet来获取spring容器中管理的<bean  id="dateBean" class="java.util.Date" sin ...

  5. Spring 容器中 Bean 的生命周期

    Spring 容器中 Bean 的生命周期 1. init-method 和 destory-method 方法 Spring 初始化 bean 或销毁 bean 时,有时需要作一些处理工作,因此 s ...

  6. 获取Spring容器中的Bean

    摘要 SpringMVC框架开发中可能会在Filter或Servlet中用到spring容器中注册的java bean 对象,获得容器中的java bean对象有如下方法 Spring中的Applic ...

  7. [十]SpringBoot 之 普通类获取Spring容器中的bean

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,想直接使用 ...

  8. Spring Boot中普通类获取Spring容器中的Bean

    我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个类注入到spring容器中,交给spring容器进行管理,但是在实际当中,我们往往会碰到在一个普通的Java类中,自己动手n ...

  9. 如何手动获取Spring容器中的bean(ApplicationContextAware 接口)

    ApplicationContextAware 接口的作用 先来看下Spring API 中对于 ApplicationContextAware 这个接口的描述:   即是说,当一个类实现了这个接口之 ...

随机推荐

  1. pc端如何引用日期插件

    页面的html部分 <li> <span>出生日期</span> <input type="text" placeholder=" ...

  2. TP5使用路由模式报错 No input file specified.

    热烈推荐:超多IT资源,尽在798资源网 application/route.php 是设置路由的文件. 将 route.php 代码修改为 <?php use think\Route; Ro ...

  3. HAOI树上染色

    Description : 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后, ...

  4. P1872 回文串计数(回文树)

    题目描述 小a虽然是一名理科生,但他常常称自己是一名真正的文科生.不知为何,他对于背诵总有一种莫名其妙的热爱,这也促使他走向了以记忆量大而闻名的生物竞赛.然而,他很快发现这并不能满足他热爱背诵的心,但 ...

  5. 使用commons-email发邮件

    这里我用到了两个包: commons-email-1.3.2.jar mail-1.4.1.jar 如果不加mail.jar,就可能会抛出NoClassDefFoundError异常 之后代码引用ht ...

  6. back_inserter 与 iterator

    查看这里: http://www.cplusplus.com/reference/iterator/back_inserter/ 是用来在最后插入的 注意,这个函数,是隐式特化了.

  7. 查看SQLSERVER当前正在运行的sql信息

    能够使用SQL Profiler捕捉在SQL Server实例上运行的活动.这种活动被称为Profiler跟踪.这个就不多说了,大家都知道,以下是使用代码为实现同样的效果. SET TRANSACTI ...

  8. Thrift 基础教程(一)安装篇

    1.Thrift简单介绍 Thrift是一款由Fackbook开发的可伸缩.跨语言的服务开发框架,该框架已经开源而且增加的Apache项目.Thrift主要功能是:通过自己定义的Interface D ...

  9. ReactNative之Flux框架的使用

    概述 流程图 项目结构 View Components actions Dispatcher Stores 感谢 概述 React Native 能够说非常火,非常多bat的项目都在使用.不用发版就能 ...

  10. html 笔记2

    .css重用 <style> 如果整个页面的宽度 > 900px时: { .c{ 共有 } .c1{ 独有 } } .c2{ 独有 } </style> <div ...