Je créais une classe de configuration java qui serait @ Import '' au printemps. À ce stade, il est étrange que @ Bean``` dans la classe soit enregistré si @ Import``` est fait sans ajouter `` @ Configuration``` à la classe de réglage. J'ai donc jeté un coup d'œil au code source pour étudier ce domaine.
pom.xml
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
	</parent>
Si vous suivez la source, il semble que c'est ici que `` @ Import '' est traité, bien que les détails d'ApplicationContext soient omis. La méthode suivante reçoit une collection de classes candidates d'importation et les traite une par une.
ConfigurationClassParser
package org.springframework.context.annotation;
class ConfigurationClassParser {
	private void processImports(/*...(Abréviation)...*/, Collection<SourceClass> importCandidates, /*...(Abréviation)...*/) {
				// ...(Abréviation)
				for (SourceClass candidate : importCandidates) {
					if (candidate.isAssignable(ImportSelector.class)) {
						// ...(Abréviation)
					else if (candidate.isAssignable(ImportBeanDefinitionRegistrar.class)) {
						// ...(Abréviation)
					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));
À ce stade, si   @ ImportSelector et `` @ ImportBeanDefinitionRegistrar pour effectuer une importation conditionnelle sont affectés, le traitement dédié à cela est effectué. Cependant, s'il ne s'agit pas de ces annotations, comme indiqué dans le commentaire du code, «Si la classe candidate à l'importation n'est pas ImportSelector ou ImportBeanDefinitionRegistrar, elle sera traitée comme @ Configuration ''.
Donc, il semble fondamentalement bon de penser que la classe cible   @ Import est considérée comme `` `` @ Configuration. Bien sûr, il y aura diverses différences de détail.
Recommended Posts