加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 如何知道在spring项目中加载bean的资源.

发布时间:2020-12-15 01:44:22 所属栏目:大数据 来源:网络整理
导读:我是Spring框架的新手.我想知道加载bean时引用的xml文件列表. 通过编写ApplicationContextAware类,我可以查看bean列表: @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:spring/sample-testcontext.xml")public class SampleClas

我是Spring框架的新手.我想知道加载bean时引用的xml文件列表.

通过编写ApplicationContextAware类,我可以查看bean列表:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/sample-testcontext.xml")

public class SampleClass implements ApplicationContextAware {
    @Autowired
    ApplicationContext applicationContext;

    @Test
    public void testMethod() {

        for (String beanName : applicationContext.getBeanDefinitionNames()) {
            System.out.println("BeanName " + beanName);
        }
    }
}

但我想知道bean的加载配置文件.

说“sample-testcontext.xml”包含

我想知道加载bean的文件名列表为“sample-testOneMorecontext.xml”和“sample-testcontext.xml”.

最佳答案
你为什么要这样做呢?我不确定内部实现是否在上下文加载后保留了该信息的记录.但是,有一种方法可以知道特定bean已从哪个资源加载.如果您有几个具有相同名称的bean定义并且您想知道哪个具有“赢”,那么这将非常有用.

收回你的例子(顺便说一句,你不需要实现ApplicationContextAware,因为你自动装配它)

@ContextConfiguration
@ContextConfiguration("classpath:spring/sample-testcontext.xml")
public class SampleTest {

    @Autowired
    private ConfigurableApplicationContext context;

    @Test
    public void foo() {
        ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
        for (String beanName : context.getBeanDefinitionNames()) {
            System.out.println(beanName + " --> "+  beanFactory.getBeanDefinition(beanName).getResourceDescription());
        }
    }
}

这给你类似的东西(不包括默认实现可以自动注册的内部后处理器bean定义)

beanFirst --> class org.SampleTest$Config
beanSecond --> class path resource [foobar.xml]

其中beanFirst是从测试的内部类(称为Config)加载的,而beanSecond是从类路径根目录中名为foobar.xml的文件加载的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读