2019独角兽企业重金招聘Python工程师标准>>>

在使用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实例*/@Overridepublic 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)

转载于:https://my.oschina.net/jiutianniao/blog/400111

获取Spring容器中Bean实例的工具类(Java泛型方法实现)相关推荐

  1. 工具类:获取 spring 容器中 bean

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. package com.orange.utils;import org.springframewor ...

  2. 获取Spring容器中的实例

    1. 介绍 在Spring环境中想要获取一个类的实例,如果直接new出来,只是创建了一个新的对象并不是Spring容器中的实例,因此如果类中使用了@Value ,@Autowired等注解是不起作用的 ...

  3. 【SpringBoot】在普通类中获取spring容器中的bean

    这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...

  4. 在普通类中获取spring容器中的bean

    在普通类中获取spring容器中的bean 1.工具类 package com.itheima.hchat.util;import org.springframework.beans.BeansExc ...

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

    SpringBoot 之 普通类获取Spring容器中的bean 转载于:https://www.cnblogs.com/lwmp/p/8892927.html

  6. 【Spring】普通类获取Spring容器的bean的方法

    我们通常在项目中获取Spring容器里bean的方式,一般是使用注解的方式(@Autowired.@Resource)直接注入就可以直接使用了,那么如果在一个普通的类里(其他地方使用它的实例是以new ...

  7. IoC基础篇(一)--- Spring容器中Bean的生命周期

    IoC基础篇(一)--- Spring容器中Bean的生命周期 日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也 ...

  8. 【已解决】Spring容器中找不到ServletWebServerFactory类出现的异常

    [已解决]Spring容器中找不到ServletWebServerFactory类出现的异常 [已解决]ApplicationContextException: Unable to start Ser ...

  9. spring boot获取spring容器中的bean对象

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

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

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

最新文章

  1. 斯坦福马腾宇:用显式正则器提升深度神经网络的泛化能力
  2. Android资源命名规范
  3. c语言#include后的尖括号和双引号有什么区别?
  4. hdu 1568 Fibonacci 对数。。
  5. SAP HANA Cloud 学习教程之二: 如何往SAP BTP 上 HANA Cloud 实例的数据库表里插入数据
  6. jquery学习系列8(过滤选择器)
  7. 训练代码_无需一行代码,完成模型训练和部署,这个AI工具开始公测
  8. 2011年最后一小时
  9. 物联网处理器五大类型应用分析指南
  10. 老段51CTO会员卡 限时半价
  11. 分享15款很棒的 JavaScript 开发工具
  12. JDBC中PreparedStatement接口的执行逻辑
  13. labelme 将自己数据集实现自动标注
  14. vscode如何使用ajax,Ajax 的初步实现(使用vscode+node.js+express框架)
  15. 最全的smarty‘总结~耿兴隆老师著作,学子zyf献上
  16. oracle数据库存储过程基本语法
  17. 一文带你读懂何为 macOS App 公证,以及如何自动化实现
  18. 2020最新手机百度云不限速教程,下载速度10M/S,比会员还快
  19. device unauthorized adbd cannot run as root in production builds insufficient permissions
  20. 在职考研读计算机科学,能否以在职读研的形式学习在职研究生计算机科学与技术专业?...

热门文章

  1. 2020 华为 一面 二面 面经
  2. python appium 并行多设备_appium 多个设备同时执行
  3. 【GNN框架系列】DGL第一讲:使用Deep Graph Library实现GNN进行节点分类
  4. idea的黄色感叹号之Spring Configuration Check (Please configura/setup Spring facet for modules)
  5. 结构风险最小和VC维理论的解释
  6. 算法第四版_第二章_练习题_2.1.1~2.1.12
  7. 编译原理完整学习笔记(八):目标代码生成
  8. 计算机网络技术提纲,计算机网络技术复习提纲
  9. linux crontab怎么启动,【linux之crontab,启动】(示例代码)
  10. 创建线程的3种方式,线程池的参数详解