Permettra À L'Autowiring Non Géré Haricots Annotée Avec @Composant
Je veux utiliser @Autocâblés à injecter un non-managed bean configuré avec @Composant dans un managed bean. Je suis sûr que j'ai la configuration de la droite, mais pour une raison que je reçois de l'exception:
No unique bean of type [foo.Baz] is defined: Unsatisfied dependency of type [class foo.Baz]: expected at least 1 matching bean
Fondée sur l'erreur, j'imagine qu'il n'est pas en mesure de trouver le Baz classe, mais je ne sais pas pourquoi. C'est ma compréhension du contexte:printemps-configuré élément dans le fichier XML de config était censé me permettre de le faire. J'ai aussi fait en sorte d'inclure les fichiers jar (spring-weaving.jar et aspectjweaver.jar).
Voici un exemple simple de mon set up.
Mon XML de config:
<beans ...>
...
<context:annotation-config/>
<context:spring-configured/>
<context:component-scan base-package="foo"/>
<bean id="bar" class="foo.Bar"/>
...
</beans>
J'ai un managed bean:
package foo;
public class Bar {
@Autowired
private Baz baz;
public void setBaz(Baz baz) {
this.baz = baz;
}
...
}
Et un non géré bean:
package foo;
@Component
public class Baz {
...
}
Est-il quelque chose que je suis absent?
MODIFIER: Le journal répertorie les fèves de son instanciation, et foo.Baz n'est pas l'un d'eux. Je ne sais pas pourquoi elle n'est pas ramasser le @Composante annoté de la classe.
Par ailleurs, le aspectj/tissage/printemps-configuré tout ça n'est pas nécessaire pour ce que vous voulez faire. C'est juste de base permettra à l'autowiring.
OriginalL'auteur Alex Beardsley | 2009-06-16
Vous devez vous connecter pour publier un commentaire.
Parce que la Barre est configuré avec xml, il ne peut être configuré avec xml. c'est à dire que vous ne pouvez pas les mélanger. De sorte que "@Autocâblés" annotation sur Baz est de ne pas obtenir ramassé (aucun des annotations devraient être). C'est seulement lorsque vous ajoutez le printemps annotation au niveau de la classe que le printemps sera à l'écoute l'un de l'autre annotations.
Ce que vous devez faire est dans le xml configurer le haricot à autocâblés par type, ajouter une définition pour ce type et vous permet d'obtenir le comportement désiré.
Une chose de plus, lorsque vous annoter un haricot avec @Composant, il est un printemps managed bean. Juste parce qu'il n'est pas créé avec xml ne signifie pas qu'il n'est pas géré. Non géré haricot est une que vous n'obtenez pas de printemps.
Bar et Baz sont deux printemps géré. C'est le mécanisme que vous avez choisi de définir qui diffère.
Vous pouvez mélanger xml et d'annotation de configuration.
oui... j'ai remarqué que maintenant
OriginalL'auteur Michael Wiles
La réponse précédente n'est pas correct, dans un aspect. Vous pouvez autowire haricots qui sont par ailleurs configuré avec xml.
De la section 3.4.5 dans http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html:
Lors de l'utilisation de configuration XML de métadonnées[2], vous spécifiez autowire mode pour un haricot définition avec le autowire attribut de l'élément. La fonctionnalité permettra à l'autowiring dispose de cinq modes. Vous spécifiez permettra à l'autowiring par bean et peut donc choisir lesquels autowire.
Vous pouvez autowire par le nom, le type et le constructeur. Il est un exemple brut de ce sujet ici: http://www.java2s.com/Code/Java/Spring/AutoWiring.htm
OriginalL'auteur Jon Vaughan
L'erreur est due à la séquence de haricots définis dans votre fichier de configuration XML.
Que sur votre fichier XML, haricot pour
bar
est créé d'abord et ensuite à leur charge les haricots en raison de laquelle@Autowired
n'est pas en mesure de trouverbaz
.Vous devez d'abord déclarer bean pour
baz
et puis pourbar
.OriginalL'auteur Vishal Makwana