如何在Spring项目中知道从中加载bean的资源。

【字号: 日期:2024-03-02浏览:26作者:雯心
如何解决如何在Spring项目中知道从中加载bean的资源。?

您为什么要完全做到这一点?我不确定上下文加载后内部实现是否会保留该信息的记录。但是,有一种方法可以知道从哪个 资源加载了特定的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$ConfigbeanSecond --> class path resource [foobar.xml]

beanFirst从测试的内部类(称为Config)beanSecond中加载了where,并从类foobar.xml路径的根目录中的文件中加载了。

解决方法

我是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”包含

<?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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsdhttp://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>

我想知道从中加载bean的文件名列表,例如“ sample-testOneMorecontext.xml”和“ sample-testcontext.xml”。

相关文章: