java.lang.nosuchMethodexception: com.sun.proxy. $ proxy58.List solution d'erreur
Il y a toujours des exceptions inattendues lors de la lecture de SSH sur le Web. Il y a beaucoup de choses que vous n'êtes pas prudents ou insouciants. Par conséquent, les solutions seront différentes. Les solutions que d'autres ont rencontrées peuvent être invalides pour vous. Tout comme l'exception que j'ai signalée ci-dessus, j'utilise Baidu plusieurs fois, et la réponse que je m'a donnée n'est rien de plus que d'ajouter une phrase à AOP, mais je suis vraiment désolé, je l'ai ajouté à l'invalide! Donc, la même chose est vraie, vous devez toujours résoudre votre propre anomalie.
Tout d'abord, permettez-moi d'expliquer la structure SSH et les raisons de l'exception de ma pratique cette fois.
Struts de type framework2.2 + hibernate4.2 + printemps4.0, salle de conteneur Tomcat7.0. En action, j'ai écrit une réaction de base de classe de base, hérité de ActionSupport et implémenté l'interface modèle. Le code est le suivant:
---------- @ Component @ Transactional ---------- Public Résumé Classe Baseaction <T> étend ActionSupport implémente ModelDriven <T> {private static final long SerialVersionUID = 2719688501307297741l; @Resource (name = "RoleServiceImpl") RoleService RoleService protégé; @Resource (name = "DepartmentService") Protected DepartmentService DepartmentService; @Resource (name = "userService") UserService protégé UserService; modèle t protégé; Public BaseAction () {ParametepezedType pt = (ParametezedType) this.getClass (). GetGenerricSuperclass (); @SuppressWarnings ("Unchecked") Class <T> Clazz = (Class <T>) PT.GetActAtualTypeArguments () [0]; essayez {Model = Clazz.NewInstance (); } catch (exception e) {lancer une nouvelle RuntimeException (e); }} public t getModel () {return modèle; }} L'avantage de cela est que l'action correspondante de chaque composant n'a besoin que de dire à la mise en œuvre des génériques, puis n'a besoin que de terminer sa propre logique. Pour chaque action pour implémenter ActionSupport, il s'agit d'une solution de base et facile à penser.
Ensuite, dans chaque action, le composant de service est appelé pour implémenter ses propres fonctions. Dans chaque action, des annotations @Component ("DepartmentAction") et @Scope ("Prototype") sont utilisées. Cependant, une fois que vous avez pratiqué le test, un java.lang.nosuchMethodexception: com.sun.proxy. $ Proxy58.list () apparaîtra. Après vérification, il est constaté que la raison en est:
Baseaction est abstrait, il n'est pas logique d'y ajouter @Transactional.
@Transactional est géré par le printemps. Les objets gérés par Spring doivent être générés en tant qu'agents. Pour une classe abstraite, il ne peut pas être nouveau dans un objet. Seule la classe d'implémentation concrète d'une classe abstraite peut être procassée par le printemps.
Par conséquent, la suppression du @Transactional sur Baseaction est la raison de cette question.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!