J'ai une bibliothèque qui fait l'installation et la configuration du runtime de log4j (pas de log4j.properties ou de log4j.xml). J'ai défini un bean avec une classe appelée MyLoggerFactory et je veux que ce soit le premier bean à être initialisé à l'aide de spring. J'ai vu qu'un problème avait déjà été déposé avec Spring pour prendre en charge l'ordre d'initialisation, mais je me demandais s'il existait un moyen de marquer un bean comme premier bean à être initialisé par le conteneur de printemps?
Réponses
Trop de publicités?Vous pouvez @Autowired une @Configuration dans la @Configuration principale
@Configuration
@Import(BusinessConfig.class, EarlyBeans.class)
public class MainConfiguration {
// The bean defined in EarlyBean will be loaded before
// most beans references by MainConfiguration,
// including those coming from BusinessConfig
@Autowired
EarlyBeans earlyBeans;
}
@Configuration
public class EarlyBeans {
@Bean
public Void earlyBean(ApplicationContext appContext) {
// .getBeansOfType allows to call for beans which might not exist
appContext.getBeansOfType(TechnicalBean.class);
return null;
}
}
Il s'agit d'une fonctionnalité demandée mais non résolue. Vous pouvez utiliser depend-on mais c'est trop verbeux. Suivez ce lien pour plus d'informations : https://jira.springsource.org/browse/SPR-3948
Vous pouvez diviser votre contexte d'application en plusieurs et utiliser l'importation dans le contexte d'application principal. Vous pouvez placer les principaux paramètres d'environnement en premier dans l'ordre d'importation, puis continuer à ajouter d'autres fichiers.
Cela pourrait être comme ci-dessous.
<!-- Import environment properties settings. -->
<import resource="Spring-Env.xml"/>
<!-- Import All the other Application contexts. -->
<import resource="Spring-MainApplicationContext.xml"/>