J'ai une classe d'entité appelée Customer , j'utilise cet objet entité dans une autre classe pour définir les données. Lorsque j'utilise cet objet ci-dessous comme
@Autowired Customer customer
Spring se plaint que veuillez configurer le bean dans vos classes.
Pouvons-nous utiliser le câblage automatique avec des objets d'entité?
4 Réponses :
En fait, Spring prend en charge @Autowire uniquement pour Spring Beans. Une classe java devient Spring Bean uniquement lorsqu'elle est créée par Spring, sinon elle ne l'est pas.
Une solution de contournement pourrait être d'annoter votre classe avec @Configurable mais vous devrez utiliser AspectJ
Veuillez consulter les documentations de printemps sur la façon d'utiliser @Configurable
Aussi, je me demande pourquoi vous câbleriez automatiquement une classe d'entité?
Je vous avertis de ne pas mélanger les entités Spring Bean et JPA dans une seule classe / cas d'utilisation car:
Si vous voulez dire JPAs @ Entity-annotation, Spring vous dit simplement qu'il n'y a pas de bean dans son contexte. Au démarrage / à l'exécution, les classes de l'application seront analysées et chaque classe annotée avec des annotations de printemps telles que @Component, @Service, etc. sera instanciée en tant que beans et placée dans un contexte global (Spring applicationcontext). Ce contexte est ensuite utilisé pour rechercher et injecter ces beans dans d'autres beans lorsque @Autowired est trouvé lors de l'analyse.
Contrairement à cela, @Entity est utilisé lors de la création du Persistence-Context de JPA (pour autant que je me souvienne) qui ne connaît pas Spring et son contexte.
La plupart des solutions pour rendre les deux contextes conscients l'un de l'autre sont plutôt un peu piratées.
Vous ne pouvez autowire que sur les beans dont le cycle de vie est géré par Conteneur Spring IoC .
Ces beans sont définis sous forme xml avec la balise , ou avec des annotations spéciales comme @Bean , @Component , @Service , @Repository etc.
D'autre part,
en termes simples, les entités sont des objets java que vous devrez créer, mettre à jour vous-même selon votre logique métier et les enregistrer / mettre à jour / les supprimer dans / de la base de données. Leur cycle de vie ne peut pas être géré par le conteneur Spring IoC .
Donc, vous ne devriez jamais avoir l'impression que vous devez autowire une entité si vous le faites correctement!
donc je dois utiliser un nouveau mot-clé pour créer un objet entité ??
@ Rocky4Ever Oui, c'est vrai. Et pour les entités existantes dans DB, vous pouvez simplement les récupérer en utilisant JPA / Hibernate .
Pourquoi voudriez-vous transférer automatiquement une entité? C'est exactement ce que vous ne voudriez pas faire passer automatiquement.