在使用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. CF GYM 100781A(菊花图+直径)

    题目大意 给出若干颗树用最少的边把它们连成一个无向连通图,同时使图的直径最小.输出最小直径. 题解 我们定义树的半径为(树的直径+1)/2.符合题意的连接方式为.所有树的“中点”连在直径最长的树的中点 ...

  2. 为OLED屏添加GUI支持3:字库

    为OLED屏添加GUI支持3:字库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM3 ...

  3. Python列表插入字典(转)

    https://blog.csdn.net/qq_29721419/article/details/70310183

  4. Python带括号的计算器

    带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走  我会努力加油  将Python学好学踏实 参考了两位博主的文章 http://www.cnblogs.co ...

  5. Html+CSS基础之CSS样式

    认识CSS样式 CSS全称为“层叠样式表 (Cascading Style Sheets)”,它主要是用于定义HTML内容在浏览器内的显示样式,如文字大小.颜色.字体加粗等. 如下列代码: p{ fo ...

  6. excel导入数据的

    .aspx 文件 <form id="form1" runat="server"> <div> <asp:FileUpload I ...

  7. Linux常用截图软件

    1.Gnome-screenshot 是一款 GNOME 截图工具,顾名思义,它是一款用来对整个屏幕.一个特定的窗口或者用户所定义一些其他区域进行捕获的工具.该工具提供了几个其他的功能,包括对所捕获的 ...

  8. JS对象继承与原型链

    1.以复制方式实现的继承 1.1浅拷贝 基本类型的复制 var parent = { lanage: "chinese" } var child = { name: "x ...

  9. 关于echarts3版本里的tree图形显示Bug、无法缩放和移动

    在使用echarts3版本的js绘制tree图表的时候,如果想动态更新tree的数据,可能会出现图表渲染有异常,并且api给出的roam配置无法控制图表通过鼠标缩放和移动,如下图: 不过更改echar ...

  10. Django_模板HTML