我是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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我想知道bean的加载配置文件.
说"sample-testcontext.xml"包含
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/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">
<beans:import resource="classpath*:spring/sample-testOneMorecontext.xml"/>
</beans:beans>
Run Code Online (Sandbox Code Playgroud)
我想知道加载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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
这给了你类似的东西(不包括默认实现可能自动注册的内部后处理器 bean 定义)
beanFirst --> class org.SampleTest$Config
beanSecond --> class path resource [foobar.xml]
Run Code Online (Sandbox Code Playgroud)
WherebeanFirst是从测试的内部类(称为Config)beanSecond加载的,并且是从foobar.xml在类路径根目录下调用的文件加载的。
| 归档时间: |
|
| 查看次数: |
2410 次 |
| 最近记录: |