Ich habe eine Java-Konfigurationsklasse erstellt, die im Frühjahr `@ Import``` sein würde. Zu diesem Zeitpunkt ist es seltsam, dass
@ Bean in der Klasse von `` `@ Import
registriert wird, ohne der Einstellungsklasse
@ Configuration``` hinzuzufügen. Also habe ich mir den Quellcode angesehen, um diesen Bereich zu untersuchen.
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
Wenn Sie der Quelle folgen, scheint es, dass hier "@ Import" verarbeitet wird, obwohl die Details von ApplicationContext weggelassen werden. Die folgende Methode übergibt eine Sammlung von Importkandidatenklassen und verarbeitet sie nacheinander.
ConfigurationClassParser
package org.springframework.context.annotation;
class ConfigurationClassParser {
private void processImports(/*...(Abkürzung)...*/, Collection<SourceClass> importCandidates, /*...(Abkürzung)...*/) {
// ...(Abkürzung)
for (SourceClass candidate : importCandidates) {
if (candidate.isAssignable(ImportSelector.class)) {
// ...(Abkürzung)
else if (candidate.isAssignable(ImportBeanDefinitionRegistrar.class)) {
// ...(Abkürzung)
else {
// Candidate class not an ImportSelector or ImportBeanDefinitionRegistrar ->
// process it as an @Configuration class
this.importStack.registerImport(
currentSourceClass.getMetadata(), candidate.getMetadata().getClassName());
processConfigurationClass(candidate.asConfigClass(configClass));
Wenn zu diesem Zeitpunkt @ ImportSelector``` und
@ ImportBeanDefinitionRegistrar``` zum Ausführen eines bedingten Imports zugewiesen sind, wird die dafür vorgesehene Verarbeitung ausgeführt. Wenn es sich jedoch nicht um diese Anmerkungen handelt, wie im Kommentar im Code angegeben: "Wenn die Importkandidatenklasse nicht ImportSelector oder ImportBeanDefinitionRegistrar ist, wird sie als" @ Configuration "verarbeitet."
Es scheint also grundsätzlich gut zu denken, dass die Zielklasse "@ Import" als "@ Configuration" angesehen wird. Natürlich wird es verschiedene Unterschiede im Detail geben.
Recommended Posts