6
votes

Pourquoi le printemps ne fait-il pas câbler mes membres @Autowired dans un pot à charge?

Je construis une application Google App Engine à l'aide du printemps 3.1 et j'ai un problème d'obtenir des membres dans l'un de mes pots câblés.

J'ai trois projets:

  1. serveur
  2. server.model
  3. serveur.persistence

    J'ai une script de construction de fourmis de sorte que lorsque mon espace de travail construit, il crée des pots pour serveur.model et serveur.persistence et les met dans le vrai répertoire libérateur pour le projet Project .

    in Server , je peux envoyer des objets d'automne à partir de serveur.model et serveur.persistence , mais dans server.model mon serveur.persistence Les haricots ne sont pas câblés même s'ils sont exactement les mêmes que dans serveur .

    snippet de mon servlet application config: xxx

    J'ai le code suivant dans le projet Projet et le code Server.Model Projet, et seul le serveur est rempli. Voici celui-ci défaillant: xxx

    edit: Il suffit de faire un test dans le projet SERVER.MODEL ESSAYER @Autowired quelque chose que je n'ai pas défini comme un haricot dans ma configuration de demande et n'a pas eu d'erreur. J'aurais dû recevoir une erreur «non trouvé de haricot trouvé» comme si je fais si je fais la même chose pour le projet Server .

    Des idées Pourquoi?


3 commentaires

Ils sont tirés du même paquet ?


@Jigarjoshi oui. La classe d'échec est dans l'emballage com.impersonal.server.model


Pourrait être associé: Stackoverflow.com/questions/9564044/...


5 Réponses :


0
votes

Essayez: xxx

au lieu de: xxx

EDIT 1:

Lors de l'utilisation de l'Autobile ci-dessus, dans votre printemps XML, essayez: xxx

au lieu de: xxx


1 commentaires

Le problème n'est pas de la manière dont il est défini, le printemps ne regarde même pas le code de ce projet pour les membres @autowired. Voir la question Modifier



0
votes

AutoWire dans XML signifie une chose légèrement différente. Au lieu de définir votre haricot en XML, vous pouvez l'annoter comme @service , il sera découvert par le composant-balayage et le @autowired fonctionnera.


1 commentaires

Je ne pense pas que le printemps scanne même mon pot, qui est le problème. Je peux essayer votre suggestion, mais si j'étais mis en ligne un bœuf de bœuf dans le serveur.Model, cela fonctionne bien. Si j'atouvencois un bean Bugus dans le serveur, je reçois une erreur car le ressort tente de le résoudre et de ne pas le faire.



0
votes

Dans votre configuration XML, utilisez AutoWire-Candidate Code> Propriété

<bean autowire="byType" id="appEngineDataStore" class="com.impersonal.server.persistance.AppEngineDataStore" autowire-candidate="true" />


0 commentaires

1
votes

Tag recherche des classes annotées.

Si vous allez à la classe Auto-joueur à l'aide de @autowire Annotation, la classe d'autobile doit être annotée avec l'une des stéréotypes d'annotation (@ composant, @ contrôleur, @ service, @ référentiel). Le ressort résout la première configuration d'annotation, puis la configuration XML. Ceci est écrit dans le document printemps comme

L'injection d'annotation est effectuée avant l'injection XML, la dernière configuration remplacera donc le premier pour les propriétés câblées par les deux approches.

Vérifier la preuve sur Doc de printemps .

Alors, ce que vous devez faire est d'ajouter des annotations pour les classes de Server Projet ainsi que serveur.model . Idem dans le cas de votre troisième projet serveur.persistence . Ajouter des annotations en fonction de couches ou de fonctionnalités.


2 commentaires

J'ai interprété la documentation différemment, mais vous pouvez être sur quelque chose. J'ai créé une nouvelle classe dans le serveur sans annotation de niveau de classe, et il n'est pas la mise en place de ses membres.


@Mstodd: C'est ce que je dis. Et c'est pourquoi je vous ai dit d'ajouter des annotations stéréotypes (@ composant, @ contrôleur, @ service, @ référentiel) en fonction de la fonctionnalité de la classe



3
votes

J'imposais mes objets de manière incorrecte. Pour des objets de cadre et tels que les contrôleurs MVC, vous n'avez rien à faire pour que vos membres @Autowired sont câblés.

Pour les objets que je créais à la volée, je ne traversais pas le conteneur de la COI, c'est pourquoi leurs dépendances n'étaient pas remplies.


3 commentaires

Pouvez-vous fournir plus de détails sur la résolution de cela?


Plus de détails pourraient être utiles aussi pour moi. Merci.


Il voulait dire que si vous créez un objet en utilisant "nouveau", il ne sera pas autonome.