0
votes

Enregistre des haricots au contexte de printemps un anti-paradigme?

Supposons que nous ayons un fichier de configuration en tant que ressource de notre application. Ce fichier de ressources contient une clé qui inclut une gamme d'objets, chacun déclarant une configuration pour instancier les objets FOO .

Normalement, nous pourrions annoter nos types avec @Component | Service | Configuration | ... , il sera donc disponible dans le contexte de l'application du printemps, ou nous pourrions simplement déclarer des usines de haricots pour montrer comment le L'objet doit être instancié dans le conteneur d'application.

Cette fois, je voudrais créer un certain nombre d'objets avec le même type, c'est-à-dire foo , mais avec une configuration différente. Chacun d'entre eux aura un nom de haricon unique, donc je pouvais @autowired tous ces haricots déclarant simplement une carte plan champ, où il est injecté par le Cadre de printemps comme une liste de paires de valeurs de clé contenant des haricots associés à leurs noms.

La question est plus philosophique. Le cadre de printemps utilise des principes de inversion du contrôle en utilisant injection de dépendance , donc nous déchargeons la gestion du cycle de vie des objets Nos classes dépendantes de.

est-ce un anti-paradigme d'enregistrer ces haricots par programme, car le printemps ne prend pas soin de ce que j'ai fait dans le fichier de configuration?


2 commentaires

Vous voulez dire que vous souhaitez enregistrer de manière programmative les haricots de printemps en mettant en œuvre beanDéfinitionregistrypoCrocessor ? Et voudrait savoir si faire une telle chose violera les principes de CIO / DI?


@Kencher oui, exactement.


3 Réponses :


0
votes

Comme vous l'avez souligné, IOC / DI consiste à déléguer la responsabilité de la construction et de la gestion de l'objet dans le cadre.

ayant dit que, si vous étendez le cadre - c'est-à-dire mettre en œuvre beandefinitionRegistrypostProcesseur - printemps gérera toujours les haricots et les injections suivantes. Cela n'ira pas contre la définition du CIO.

Maintenant, entrez plus en détail, si vous accédez par programmation au contexte au moment de l'exécution des classes diverses pour obtenir des haricots, vous enfreindrez le motif du CIO. En faisant cela, vous redonner aux classes la responsabilité de savoir comment se construire eux-mêmes.

ma règle du pouce est, moins mes cours connaissent les détails de la mise en œuvre du printemps (couplage lâche), mieux c'est. aussi, si vous enregistrez les haricots après le cycle de vie du ressort (ne pas créer les haricots après BeansFactoryPostProcesseur Runs), vous allez simplement couler avec le chemin naturel du cadre.


0 commentaires

0
votes

En utilisant BeanDefinitionRegistrypostProcesseur , vous pouvez définir programmatiquement la configuration pour un haricot. C'est juste une configuration de haricot mais pas une instance de haricot. Le ressort créera l'instance de haricot et gérera son cycle de vie en fonction de la configuration des haricots.

Ainsi, à la fin, le haricot est toujours créé et géré par le ressort qui ne violera pas la philosophie du CIO qui favorise Let Conteneur de créer un haricot plutôt que le développeur.


0 commentaires

0
votes

Enregistrement des haricots de printemps et du ressort Gérer le cycle de vie de ces haricots sont des opérations distinctes. Il faut que tous les haricots soient disponibles au printemps afin de gérer leur cycle de vie.

Il existe plusieurs façons d'enregistrer les haricots (pas une liste exhaustive).

  • Fichiers XML
  • annotations Java - @ComponentsCan / @configuration / @Component Quelques exemples de cet enregistrement.

  • Les post-propulseurs sont un autre moyen de faire la même chose.

  • printemps.factories - vous pouvez même ajouter tous vos haricots sous méta-inf / printemps.factories sous une propriété spéciale et faire toutes les haricots disponibles pour votre application de démarrage de printemps.

  • Candidat Index des composants
  • style fonctionnel d'inscription avec les fournisseurs qui est paresseux sans frais de réflexion. Voir [1]

    Vous pouvez même mélanger et faire correspondre un ou plusieurs des mécanismes ci-dessus et le printemps vous fera respecter toutes.

    Pour répondre à votre question spécifique ci-dessus:

    > Est-ce un anti-paradigme d'enregistrer ces haricots par programme, puisque le printemps ne prend pas soin de ce que j'ai fait dans le fichier de configuration?

    définitivement pas. Vous pouvez enregistrer les haricots d'une ou plusieurs façons, mais cela ne change pas à quel point le ressort les traitera en cas de câblage des dépendances.

    La raison pour laquelle il existe tant de mécanismes d'enregistrement consiste à donner au développeur d'applications le choix de choisir le mécanisme le plus approprié en fonction de leur utilisation d'utilisation, espérant que la migration de nouvelles méthodes plus optimisées.

    Lorsque vous demandez toutes les haricots d'un certain type dans un mappe , le printemps vous fournira toutes les dépendances indépendamment de leur inscrit.

    coller à quelques mécanismes d'enregistrement (aussi petit que possible) qui fonctionnent pour vous, afin que vos collègues partenaires puissent comprendre et maintenir la façon dont les haricots sont enroulées.

    [1] - Whats" Nouveau au printemps 5.x


0 commentaires