Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找加载了哪个spring上下文文件的bean_Spring - Fatal编程技术网

查找加载了哪个spring上下文文件的bean

查找加载了哪个spring上下文文件的bean,spring,Spring,它是一个大型应用程序,有多个bean xml文件由spring容器加载 有一个bean(具有相同的id)不知何故被覆盖 有没有办法告诉spring记录哪个bean是从哪个.xml文件创建的?您可以创建一个ReaderEventListener并记录它们。但是您需要重写initBeanDefinitionReader以将侦听器设置为XmlBeanDefinitionReader(我认为没有其他方法,但可能是…) 例如: public class LogReaderEventListener e

它是一个大型应用程序,有多个bean xml文件由spring容器加载

有一个bean(具有相同的id)不知何故被覆盖


有没有办法告诉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());
    }

}