查找加载了哪个spring上下文文件的bean
它是一个大型应用程序,有多个bean xml文件由spring容器加载 有一个bean(具有相同的id)不知何故被覆盖查找加载了哪个spring上下文文件的bean,spring,Spring,它是一个大型应用程序,有多个bean xml文件由spring容器加载 有一个bean(具有相同的id)不知何故被覆盖 有没有办法告诉spring记录哪个bean是从哪个.xml文件创建的?您可以创建一个ReaderEventListener并记录它们。但是您需要重写initBeanDefinitionReader以将侦听器设置为XmlBeanDefinitionReader(我认为没有其他方法,但可能是…) 例如: public class LogReaderEventListener e
有没有办法告诉spring记录哪个bean是从哪个.xml文件创建的?您可以创建一个
ReaderEventListener
并记录它们。但是您需要重写initBeanDefinitionReader
以将侦听器设置为XmlBeanDefinitionReader
(我认为没有其他方法,但可能是…)
例如:
public class LogReaderEventListener extends EmptyReaderEventListener {
private static final Log log = LogFactory.getLog(LogReaderEventListener.class);
@Override
public void componentRegistered(ComponentDefinition componentDefinition) {
log.info("Registered Component [" + componentDefinition.getName() + "]");
for (BeanDefinition bd : componentDefinition.getBeanDefinitions()) {
String name = bd.getBeanClassName();
if (bd instanceof BeanComponentDefinition) {
name = ((BeanComponentDefinition) bd).getBeanName();
}
log.info("Registered bean definition: [" + name + "]" +
" from " + bd.getResourceDescription());
}
}
public static void main (String[] args) {
ClassPathXmlApplicationContext context = new LogXmlContext("applicationContext.xml");
context.close();
}
}
class LogXmlContext extends ClassPathXmlApplicationContext {
public LogXmlContext(String configLocation) {
super(configLocation);
}
@Override
protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
super.initBeanDefinitionReader(reader);
reader.setEventListener(new LogReaderEventListener());
}
}