获取Spring容器中Bean实例的工具类 Java泛型方法实现

               

在使用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> 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://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值