Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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

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
Java 如何列出所有加载的Springbean定义文件_Java_Spring - Fatal编程技术网

Java 如何列出所有加载的Springbean定义文件

Java 如何列出所有加载的Springbean定义文件,java,spring,Java,Spring,在大型企业系统中,在ApplicationContext构建过程中导入哪些文件并不总是很清楚。 是否有办法列出在该过程中加载的所有文件? 我知道如何列出加载的属性文件,但不知道如何列出导入的bean文件 更新示例: 文件1:applicationContext.xml包含以下行: <import resource="classpath*:importableBeans1.xml" /> <import resource="classpath*:importableBeans2

在大型企业系统中,在ApplicationContext构建过程中导入哪些文件并不总是很清楚。 是否有办法列出在该过程中加载的所有文件? 我知道如何列出加载的属性文件,但不知道如何列出导入的bean文件

更新示例:

文件1:applicationContext.xml包含以下行:

<import resource="classpath*:importableBeans1.xml" />
<import resource="classpath*:importableBeans2.xml" />
<import resource="classpath*:importableBeans3.xml" />

启动
ClassPathXmlApplicationContext
或更一般的
AbstractXmlApplicationContext
时,将使用
XmlBeanDefinitionReader
加载xml文件

每次加载xml文件时,准确地说,在加载之前,您都会从
loadBeanDefinitions(EncodedResource EncodedResource)
获得一个日志(信息):

如果您不能依赖此信息,可以使用
ReaderEventListener

public class TrackingImportXmlApplicationContext extends ClassPathXmlApplicationContext {

    private static final TrackingImportReaderEventListener trackingImportReaderEventListener = new TrackingImportReaderEventListener();

    public TrackingImportXmlApplicationContext(String configLocation) {
        super(configLocation);
    }

    public TrackingImportXmlApplicationContext(String... configLocations) {
        super(configLocations);
    }

    @Override
    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
        super.initBeanDefinitionReader(reader);
        reader.setEventListener(trackingImportReaderEventListener);
    }

    public TrackingImportReaderEventListener getTrackingImportReaderEventListener() {
        return trackingImportReaderEventListener;
    }

    public static class TrackingImportReaderEventListener extends EmptyReaderEventListener {

        private final Set<String> imports = new HashSet<>();

        @Override
        public void importProcessed(ImportDefinition importDefinition) {
            imports.add(importDefinition.getImportedResource());
        }

        public Set<String> getImports() {
            return imports;
        }
    }
}

在后面的解决方案中,您将只导入文件,但当然您已经知道初始xml文件。

它由Spring容器管理,并且是按需创建的(对象在需要时创建)。为什么您需要知道这些?我需要查看在应用程序启动时加载了哪些文件。我不需要bean,只需要文件。你是说资源(比如.properties)文件还是像.java这样的任何文件?我用更多的信息更新了我的问题。我只想要xml文件。请看上面。
    if (logger.isInfoEnabled()) {
        logger.info("Loading XML bean definitions from " + encodedResource.getResource());
    }
public class TrackingImportXmlApplicationContext extends ClassPathXmlApplicationContext {

    private static final TrackingImportReaderEventListener trackingImportReaderEventListener = new TrackingImportReaderEventListener();

    public TrackingImportXmlApplicationContext(String configLocation) {
        super(configLocation);
    }

    public TrackingImportXmlApplicationContext(String... configLocations) {
        super(configLocations);
    }

    @Override
    protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) {
        super.initBeanDefinitionReader(reader);
        reader.setEventListener(trackingImportReaderEventListener);
    }

    public TrackingImportReaderEventListener getTrackingImportReaderEventListener() {
        return trackingImportReaderEventListener;
    }

    public static class TrackingImportReaderEventListener extends EmptyReaderEventListener {

        private final Set<String> imports = new HashSet<>();

        @Override
        public void importProcessed(ImportDefinition importDefinition) {
            imports.add(importDefinition.getImportedResource());
        }

        public Set<String> getImports() {
            return imports;
        }
    }
}
public class Main {

    public static void main(String[] args) {
        TrackingImportXmlApplicationContext applicationContext = new TrackingImportXmlApplicationContext("/META-INF/applicationContext.xml");
        TrackingImportXmlApplicationContext.TrackingImportReaderEventListener tracking = applicationContext.getTrackingImportReaderEventListener();
        for (String _import : tracking.getImports()) {
            System.out.println(" >>> imported : " + _import);
        }
    }
}