8
votes

Je veux définir une classe de haricots de printemps sans interface

J'ai un haricot de printemps qui s'étend hibernateaosupport . Je veux que ce haricot soit injecté dans mes contrôleurs, mais je ne veux pas qu'elle implémente une interface. Je veux juste vous référer à la classe de béton de l'intérieur du reste de mon code (ne pas utiliser l'aopproxy peut-être?) Est-ce que quelqu'un a un moyen de faire cela? XXX

Je sais que c'est une bonne idée Pour utiliser l'interface et c'est tout le point de CIO, mais s'il vous plaît ne vous suggérez pas d'utiliser l'interface.


5 commentaires

Qu'est-ce qui vous oblige actuellement à utiliser une interface?


Bon point Axtavt (et Adam) - Il donne une java.lang.classnotfoundexception: mysampleService, mais la classe est absolument là. Cela n'a commencé que de donner que lorsque j'ai enlevé le "MySampleInterface" correspondant de mon projet ....


Avez-vous votre mySampleService implémentant une autre interface du tout - toute interface de marqueur, etc.? En outre, avez-vous des annotations telles que @TransAderal sur mysampleService?


Oui MySampleService a @TransActional (Readonly = False) au niveau de la classe et implémente uniquement ce que ses superclasses (hibernateaosupport) implémentent ... merci!


Cette erreur est dans la trace aussi - org.springframework.beans.Factory.noschbeandefinitionExcepté Ion: Pas de haricot de type [com.sample.mysampleservice] trouvé pour la dépendance: attendu au moins 1 haricot qui qualifie de candidat d'AutoWire pour cette dépendance. Annotations de dépendance: {@ org.springframework.beans.Factory.annotation.Autowired (req uired = true)}


3 Réponses :


0
votes

vérifier ce qui suit. Assurez-vous que vous avez un cglib sur votre path.

http: // static.springsource.org/spring/docs/3.0.0.m3/spring-framework-reference/html/ch08s06.html


1 commentaires

Le tapis de classe va bien, car comme je l'ai dit, tout a fonctionné avant de retirer l'interface .... n'aurait pas pu travailler auparavant sans cglib ....



12
votes

Si la classe à proxy (par proxy transactionnel dans votre cas) implémente toute interface ( initialisationBean implémenté par hibernateaosupport dans votre cas), ressort par défaut utilise la stratégie de proxyage basée sur la stratégie de proxy sur les proxies dynamiques JDK.

Donc, cela crée une proxy de type initialisationBean , que, évidemment, ne peut pas être injecté dans un champ de type mysampleService . .

Si vous ne voulez pas utiliser l'interface, vous pouvez remplacer la stratégie utilisée par aspect transactionnel en déclarant avec proxy-cible-class = "vrai" .

Voir aussi:



0
votes

Vous pouvez tout écrire, y compris le contrôleur mappé dans le XML comme haricots, vous n'avez pas besoin d'écrire des interfaces. Sinon, avec l'utilisation d'une annotation, vous devez construire des interfaces pour les proxy.


0 commentaires