[JAVA] La cible @Import est traitée comme @Configuration au printemps

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

La cible @Import est traitée comme @Configuration au printemps
Le traitement des événements est effectué au printemps.
Spring Autowired est écrit dans le constructeur
Problème de configuration Maven avec Spring pom.xml dans Eclipse
Bean de sortie au format JSON au printemps
[Java] Quelque chose est affiché comme "-0.0" dans la sortie
ORA-08177 lorsque Spring Batch est exécuté en continu dans Oracle
Java11: exécuter le code Java dans un seul fichier tel quel