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 code> FOO code>. p>
Normalement, nous pourrions annoter nos types avec Cette fois, je voudrais créer un certain nombre d'objets avec le même type, c'est-à-dire La question est plus philosophique. Le cadre de printemps utilise des principes de inversion du contrôle em> en utilisant injection de dépendance em>, donc nous déchargeons la gestion du cycle de vie des objets Nos classes dépendantes de. P>
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? p> @Component | Service | Configuration | ... code>, 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. P>
foo code>, mais avec une configuration différente. Chacun d'entre eux aura un nom de haricon unique, donc je pouvais
@autowired code> tous ces haricots déclarant simplement une carte
plan
3 Réponses :
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. P>
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. p>
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. Strong> aussi, si vous enregistrez les haricots après le cycle de vie du ressort (ne pas créer les haricots après BeansFactoryPostProcesseur em> Runs), vous allez simplement couler avec le chemin naturel du cadre. P>
En utilisant 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. P> BeanDefinitionRegistrypostProcesseur code>, 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. p>
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. P>
Il existe plusieurs façons d'enregistrer les haricots (pas une liste exhaustive). P>
annotations Java - Les post-propulseurs sont un autre moyen de faire la même chose. P> li>
Vous pouvez même mélanger et faire correspondre un ou plusieurs des mécanismes ci-dessus et le printemps vous fera respecter toutes. P>
Pour répondre à votre question spécifique ci-dessus: p>
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. P>
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. P>
Lorsque vous demandez toutes les haricots d'un certain type dans un 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. p>
[1] - Whats" Nouveau au printemps 5.x P> @ComponentsCan code> /
@configuration code> /
@Component code> Quelques exemples de cet enregistrement. p> li>
printemps.factories code> - vous pouvez même ajouter tous vos haricots sous
méta-inf / printemps.factories code> sous une propriété spéciale et faire toutes les haricots disponibles pour votre application de démarrage de printemps. P> li>
> 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? code> p>
mappe
Vous voulez dire que vous souhaitez enregistrer de manière programmative les haricots de printemps en mettant en œuvre
beanDéfinitionregistrypoCrocessor code>? Et voudrait savoir si faire une telle chose violera les principes de CIO / DI?
@Kencher oui, exactement.