开发者社区> 问答> 正文

获取JavaBean的方法有那些

在写代码的时候经常会碰到需要获取JavaBean的场景,使用Spring 的 @Resource/@Autowired 注入基本能覆盖80% 获取bean 的场景,但是在有的场景下不能使用注入的方式,如:在使用dubbo 的filter 功能时,因为dubbo 的filter不由Spring 管理,所以使用注入的方式会导致注入不成功。

此时,只能从容器中手动的获取Bean,那么获取JavaBean的方法有那些

展开
收起
管理贝贝 2016-07-14 16:05:14 4630 0
3 条回答
写回答
取消 提交回答
  • 1-- ApplicationContext context = new FileSystemXmlApplicationContext("web/WEB-INF/classes/spring_*.xml");
    2--ApplicationContext context=new ClassPathXmlApplicationContext("pring_*.xml");
    3--WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();  部分类里Spring无法注入bean时可以用这种

    2019-07-17 19:56:28
    赞同 展开评论 打赏
  • 推荐通过实现ApplicationContextAware接口,获取ApplicationContext,然后通过getBeansOfType获取

    2019-07-17 19:56:28
    赞同 展开评论 打赏
  • 静静的看着你们

    继承ApplicationContextAware 来获取Bean

    package com.example;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    public class ApplicationContextUtil implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{
            this.applicationContext = applicationContext;
        }
        public static ApplicationContext getContext() {
            return applicationContext;
        }
        public static <T> T getBean(String name) {
            if (applicationContext == null) {
                return null;
            }
            return (T) applicationContext.getBean(name);
        }
    }

    将ApplicationContextAware 配置进application-context.xml

    <bean id="applicationContextUtil" class="com.example.ApplicationContextUtil"/>

    在需要的地方获取bean

    TestBean testBean = ApplicationContextUtil.getBean("testBean");

    使用ContextLoader 获取bean

    ApplicationContext app = ContextLoader.getCurrentWebApplicationContext();
    TestBean testBean = app.getBean("testBean", TestBean.class);

    继承 BeanFactoryAware 获取bean
    在单元测试时,像dubbo filter这种场景,只能使用Spring 容器来获取bean了, 示例如下:

    创建一个类继承BeanFactoryAware

    package com.example;
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.BeanFactoryAware;
    
    public class SpringBeanFactory implements BeanFactoryAware {
        private static BeanFactory beanFactory;
        @Override
        public void setBeanFactory(BeanFactory factory) throws BeansException {
            this.beanFactory = factory;
        }
    
        /**
         * 根据beanName名字取得bean
         * @param name
         * @param <T>
         * @return
         */
        public static <T> T getBean(String name) {
            if (beanFactory == null) {
                return null;
            }
            return (T) beanFactory.getBean(name);
        }
    }

    SpringBeanFactory 配置进application-context.xml

    <bean id="springBeanFactory" class="com.example.SpringBeanFactory"/>

    在需要的地方获取bean

    TestBean testBean = SpringBeanFactory.getBean("testBean");
    2019-07-17 19:56:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载