web-dev-qa-db-fra.com

Référencez un composant Spring annoté dans une définition de bean XML

J'utilise une bibliothèque externe qui nécessite de la configurer à l'aide d'une définition de bean XML; Dans la définition du haricot, je dois fournir à une classe externe un haricot de mon projet. J'utilise des annotations à ressort avec le balayage des composants. 

Comment référencer mon bean annoté dans la définition de bean XML? 

Existe-t-il des alternatives à la création d'une définition de bean XML?

Détails: Printemps 3.0.7

21
Mike Rylander

Quelle que soit la manière dont il a été créé (basé sur des métadonnées XML ou d'annotation), chaque bean se termine dans le contexte de l'application sous un nom unique.

Si vous venez d'annoter votre classe avec @Component ou des dérivés, sans indiquer de nom, le schéma de nommage par défaut sera appliqué et le nom du bean sera le nom de votre classe avec le premier caractère minuscule: ClassName => "className".

Dans cet esprit, si vous avez besoin d'injecter ce bean dans une définition de bean XML, vous le faites comme n'importe quel bean dans votre contexte:

<bean id="someBean" class="SomeClass">
    <property name="someProp" ref="className"/><!-- to stick to the above example -->
</bean>

Puisque vous mélangez des annotations avec XML, le contexte de l’application pourra localiser correctement le bean "className".

35
Costi Ciudatu

L'annotation @Service prend une valeur String optionnelle qui peut être utilisée pour donner au bean un nom de votre choix. Par exemple, si votre haricot personnalisé ressemble à:

@Service("mySpecialName")
public class MyClass { ... }

Ensuite, votre XML pourrait avoir:

<bean class="com.someone.else.library.SomeClass">
  <property name="someProp" ref="mySpecialName"/>
</bean>
6
Ian Robertson

Assurez-vous d’ajouter le code ci-dessous dans votre fichier xml

<context:component-scan base-package="" />
<context:annotation-config />
0
ravi korni