Comment nous pouvons injecter manuellement un objet sans utiliser l'installation de conteneurs. J'ai fait quelque chose de similaire à la réflexion comme suit.
Class actionClass = Class.forName("SampleClass"); Object actionObject = actionClass.newInstance(); Method reqMethod = actionClass.getMethod("setRequest", HttpServletRequest.class); reqMethod.invoke(actionObject,request);
5 Réponses :
L'injection de dépendance implique que vous obtenez des références correctement initialisées apparaissant "par magie". p>
Vous appelez la méthode SETReQuest () avec l'objet de la demande, mais DI permet également de définir les champs sans invoquer des méthodes. P>
Guice n'est pas en tant que telle nécessite un conteneur, mais utilise la magie de chargeur de classe démarrée dans la méthode principale. Cela seraient-ils utilisables pour vous? P>
J'aime le terme "par magie". Comment l'initialisation se passe-t-elle. Comment cela se fait au printemps ou à des conteneurs similaires.
L'idée est de déplacer l'initialisation de la classe injectée et de la classe L'injection se produit, de sorte qu'ils ne savent pas comment cela se produit. Lorsque vous déplacez ensuite le code d'injection, la mise en œuvre dépend de la mise en œuvre et vous i> n'a pas besoin de savoir. En fin de compte, la réflexion est utilisée mais c'est tout comme dire que Hibernate utilise JDBC à la fin.
Mon intention est de passer de la demande d'objet à différentes classes de contrôleur dynamiquement à partir d'un filtre Dispatcher, où nous obtenons des objets de demande et de réponse.
En utilisant une réflexion, je crains de la performance.Si le printemps fait de la même manière, alors non je ferai la même chose.
La réflexion est la seule façon. En cas de doute sur la performance, mesurer.
L'injection de dépendance n'est rien de plus que de fournir une classe avec ses dépendances, plutôt que de les trouver elle-même (via des singletons / recherches, etc.). Donc, vous pouvez le faire en code de manière triviale ainsi: (pseudocode). Ici, le mydao code> est en train d'être injecté avec une connexion de base de données. Si cette connexion de base de données implémente une interface, vous pouvez facilement se moquer de cela pendant les tests. P> P>
Eh bien, lorsque vous définissez un objet dans un autre objet à l'aide de la méthode Setter ou via un constructeur, il s'agit également de l'injection de dépendance. L'injection de dépendance signifie uniquement créer une relation (dépendance) dans des objets. P>
Utiliser la réflexion Comme vous l'avez fait en est une autre forme. p>
Pourquoi utiliseriez-vous une réflexion? Pourquoi pas simplement: qui fait la même chose, mais est plus lisible, permet au compilateur de vérifier que les types et les méthodes existent réellement, vous fournit Javadoc pour la méthode invoquée, active votre IDE pour aider dans les refacteurs, ... p> et il est toujours une injection de dépendance, car l'action ne va pas chercher sa demande, mais reçoit la demande lors de l'initialisation. P> < Strong> Modifier Strong>: Thorbjã¸rn demandé je montre comment cette action serait utilisée. Il serait lui-même injecté (à l'aide d'un seigteur) dans la composante utilise l'action. Le composant utiliserait ensuite l'objet d'action injecté. P> si Dans ce cas concret, j'aurais interrogé que l'action doit vraiment tenir une demande dans le cadre de son état ou peut être immuable et agir simplement sur la demande adoptée par le servlet en tant que paramètre de méthode. Dans ce cas, l'initialisation du temps de démarrage ferait: p> et servlet code> est destiné à vivre plus longtemps que
action code>, à savoir Il devrait utiliser une nouvelle action
code> à chaque fois qu'il en a besoin d'une seule, on peut plutôt injecter un fichier
Actionfactory code> dans
servlet code>. p>
actionbasedSerservlet code> définirait p>
Le mot clé nouveau code> donne une liaison extrêmement forte de la classe actuelle à celle nouvelle. Injection de dépendance découle i> cette forte liaison entre les deux.
L'injection de dépendance découle le composant de ses dépendances. Cela ne signifie pas qu'il ne faut pas y avoir une autre partie du code connaissant à la fois le composant et sa dépendance. Sampleclass n'est pas couplé à la demande particulière de mon exemple.
Dans mon cas, le nom de classe est dynamique.Pour faire un di pour toutes les classes. C'est pourquoi j'ai utilisé la réflexion. Merci pour votre réponse.
@meriton, dans ce cas, veuillez ajouter le code supplémentaire indiquant comment utiliser i> l'objet action.
Le cadre de printemps est l'une des implémentations les plus populaires. C'est aussi opensource. Vous pouvez consulter la classe org.springframeowrk.beans.beanutils, en particulier les méthodes CopyProperties (tous les 4 d'entre eux) pour des exemples sur la façon de faire cela. Pour plus d'informations, vous pouvez également voir la hiérarchie de la classe d'org.springframework.beans.Factory.Beanfactory pour différentes stratégies. P>