我是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”包含
spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
sspath*:spring/sample-testOneMorecontext.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的文件加载的.
原文地址:https://www.jb51.cc/spring/431511.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。