• 获取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
     */
    @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)

  • 相关阅读:
    卡特兰数
    hdu 1023 Train Problem II
    hdu 1022 Train Problem
    hdu 1021 Fibonacci Again 找规律
    java大数模板
    gcd
    object dection资源
    Rich feature hierarchies for accurate object detection and semantic segmentation(RCNN)
    softmax sigmoid
    凸优化
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463411.html
Copyright © 2020-2023  润新知