Dans le conteneur de printemps, en plus d'établir des dépendances par <Fef>, il existe des relations spéciales entre les deux haricots.
1 héritage
Dans le principe de programmation orienté objet, lorsque plusieurs classes ont les mêmes méthodes et propriétés, la classe parent peut être introduite pour éliminer le code en double. Dans le conteneur de printemps, si plusieurs haricots ont les mêmes informations de configuration, nous pouvons définir un haricot parent, afin que le haricot enfant hérite automatiquement les informations de configuration du haricot parent.
<! - Parent Bean -> <Bean Id = "AbstractBook" P: name = "Veil" Abstract = "True"> </EAN> <! - Child Bean -> <Bean ID = "Book1" P: Press = "Chongqing Publishing House" Parent = "AbstractBook" /> <Bean Id = "Book2" P: Press = "Shanghai Translation Publishing House" Parent = "AbstractBook" />
D'une manière générale, la fonction du bean parent est de simplifier la configuration du haricot enfant, il est donc défini sur une classe abstraite (abstract = "true"); Si le haricot parent n'est pas réglé sur une classe abstraite ici, le conteneur à ressort instanciera le haricot parent.
2 prédépendance
D'une manière générale, <fef> est utilisé pour établir des dépendances entre les haricots. Les conteneurs de printemps sont responsables de la gestion de ces relations. Lors de l'instanciation d'un haricot, le récipient garantit que tous les haricots dépendent du haricot qui ont terminé le travail d'initialisation.
Mais dans certains cas, les dépendances entre les haricots ne sont pas si évidentes.
Supposons que dans ce scénario, un système définit certains paramètres du système (tels que la période de validité du mot de passe, que ce soit pour activer la surveillance, etc.), et ces paramètres de démarrage sont utilisés pour contrôler la logique de fonctionnement du système. Nous utilisons une classe de réglage pour représenter ces paramètres:
Paramètres de classe publique {/ ** * Temps d'expiration du mot de passe (unité: jours) * / public static int pas_timeout = 30; / ** * s'il faut activer la surveillance * / public statique booléen is_monitor = false;}Ici, nous définissons les valeurs par défaut pour ces paramètres. Le système dispose également d'un backend administratif, par lequel les administrateurs peuvent ajuster ces paramètres du système et les enregistrer dans la base de données. Par conséquent, lorsque l'application démarre, ces paramètres système doivent être chargés à partir de la base de données:
Système de classe publique {public System () {init (); } / ** * Initialisation * / private void init () {// Supposons que ces valeurs proviennent des paramètres de la base de données.pass_timeout = 20; Settings.is_monitor = true; }}Le système a un gestionnaire d'expiration de mot de passe, qui créera une tâche chronométrée pour détecter si le mot de passe expire en fonction du [nombre de jours où le mot de passe expire] dans les paramètres du système:
classe publique PassManager {int timeout; public passManager () {timeout = settings.pass_timeout; TIMERTASK (); } / ** * Tâche chronométrée pour détecter si le mot de passe expire * / private void timeryTask () {} public int getTimeout () {return timeout; }}Bien que PassManager ne s'appuie pas directement sur les paramètres, logiquement, PassManager s'attend à ce que le système charge les paramètres du système initialisés avant de commencer.
Au printemps, vous pouvez explicitement spécifier le haricot de prédépendance d'un haricot via la propriété Detend-on pour vous assurer que le haricot de prédépendance de ce haricot a été chargé avant l'instanciation.
<bean id = "System" /> <bean id = "manager" Detend-on = "System" />
Si le préfixe dépend de plusieurs haricots, le nom de haricot peut être configuré par des virgules, des espaces ou des demi-finales.
3 ID de citation
Supposons qu'un haricot doit se référer à la valeur d'identification (nom de haricot) d'un autre haricot. Ceci est généralement utilisé pour obtenir un autre haricot via la méthode GetBean (Name) dans le haricot pendant l'exécution.
Il peut être configuré comme ceci:
<bean id = "auteur" /> <bean id = "book" p: auteur = "auteur" />
Attribut d'auteur ajouté dans le livre:
/ ** * AUTEUR ID Bean * / Private String AuthorId;
Bien qu'il puisse être défini sous cette forme littérale, il n'y a pas de véritable relation de référence entre les deux. Par conséquent, l'erreur de configuration ne sera trouvée que lorsque l'appel spécifique est appelé.
Spring fournit la balise élément <idref>, qui fait référence au nom d'un autre bean via <idref>. De cette façon, lorsque le conteneur commence, l'exactitude de la relation de référence sera vérifiée et des informations de configuration incorrectes peuvent être trouvées à l'avance.
<bean id = "Author10" /> <bean id = "book10"> <propriété name = "AuthorId"> <idRef bean = "Author10" /> </ Property> </ bean>
Si une erreur de configuration se produit, un BeanDefinitionStoreException sera lancé lorsque le conteneur à ressort démarre, et l'analyseur XML de l'IDE trouvera également des erreurs de référence à l'avance, il est donc recommandé d'utiliser la balise élément <iDRef> pour référence à l'ID.
Résumer
Ce qui précède est la relation spéciale entre les haricots de printemps présentés par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, laissez-moi un message. L'éditeur vous répondra à temps!