博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取Spring容器中Bean实例的工具类(Java泛型方法实现)
阅读量:6601 次
发布时间:2019-06-24

本文共 2280 字,大约阅读时间需要 7 分钟。

hot3.png

在使用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 */@Servicepublic 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 getBean2(Class
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); }}

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

相关阅读

原文链接:(小雷网-FansUnion.cn)

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

你可能感兴趣的文章
六色帽子思维---提高会议效率的尝试
查看>>
linux openssh升级
查看>>
Python中MySQLdb的connect的用法
查看>>
int main(int argc,char* argv[])详解
查看>>
SQL Server 统计信息
查看>>
Android APK反编译就这么简单 详解(附图)
查看>>
5个基于Linux命令行的文件下载和网站浏览工具
查看>>
SQLMetalUI 简单的Linq生成器
查看>>
1234567选择3个数字组合
查看>>
Rafy 框架 - 执行SQL或存储过程
查看>>
10046 trace 及EBS如何进行trace debug [final]
查看>>
分享插件化平台规范——OSGi R4规范的中文翻译
查看>>
打通Fedora19的ssh服务
查看>>
Percona Server 5.6 (数据库MySQL用户配置和数据库用户权限配置)
查看>>
SQL注入攻击:攻与防
查看>>
EntityFramework DbContext 线程安全
查看>>
jquery--延迟对象
查看>>
JS只能输入数字,数字和字母等的正则表达式
查看>>
Azure ARM (13) 从现有VHD文件,创建新的ARM VM
查看>>
创建作业的通用存储过程
查看>>