一尘不染

如何从Spring获取实例化的bean列表?

spring

我在Spring上下文中有几个具有状态的bean,所以我想在单元测试之前/之后重置该状态。

我的想法是向助手类添加一个方法,该方法仅遍历Spring上下文中的所有bean,检查用@Before或注释的方法@After并调用它们。

如何从中获取实例化的 bean 列表ApplicationContext

注意:仅迭代所有定义的bean的解决方案是没有用的,因为我有很多惰性bean,并且其中一些不能被实例化,因为这在某些测试中会失败(即,我有一个需要a的bean,java.sql.DataSource但是测试有效,因为它们没有不需要那个豆)。


阅读 645

收藏
2020-04-20

共1个答案

一尘不染

例如:

 public static List<Object> getInstantiatedSigletons(ApplicationContext ctx) {
            List<Object> singletons = new ArrayList<Object>();

            String[] all = ctx.getBeanDefinitionNames();

            ConfigurableListableBeanFactory clbf = ((AbstractApplicationContext) ctx).getBeanFactory();
            for (String name : all) {
                Object s = clbf.getSingleton(name);
                if (s != null)
                    singletons.add(s);
            }

            return singletons;

    }
2020-04-20