java.lang.nosuchmethodexception:com.sun.proxy。$ proxy58.listエラーソリューション
WebでSSHをプレイするとき、常にいくつかの予想外の例外があります。注意したり不注意ではないことがたくさんあります。したがって、ソリューションは異なります。他の人が遭遇したソリューションは、あなたにとって無効かもしれません。上記の例外と同じように、私は何度もBaiduを使用してきましたが、私に与えた答えは、AOPに文を追加することに過ぎませんが、ごめんなさい、私はそれを無効に追加しました!同じことが当てはまりますが、あなたはまだあなた自身の異常を解決しなければなりません。
まず、今回の私の練習におけるSSH構造と例外の理由を説明しましょう。
フレームワークタイプのstruts2.2+hibernate4.2+spring4.0、コンテナルームTomcat7.0。実際に、私は基本クラスのベースアクションを書き、アクションサポートを継承し、モデル駆動型インターフェイスを実装しました。コードは次のとおりです。
----------@component@transactional ----------パブリックアブストラクトクラスのベースアクト<T> extends ActionSupport Implments modeldriven <t> {private static final long serialversionuid = 2719688501307297741L; @Resource(name = "RoleserviceImpl")Protected Roleservice Roleservice; @resource(name = "dirmmentservice")保護された部門サービスdepartmentservice; @resource(name = "userservice")Protected Userservice userservice;保護されたTモデル。 public BaseAction(){parameterizedType pt =(parameterizedType)this.getClass()。getGenericsuperClass(); @suppresswarnings( "unchecked")class <t> clazz =(class <t>)pt.getactualtypearguments()[0]; try {model = clazz.newinstance(); } catch(Exception e){新しいruntimeException(e); }} public t getModel(){return model; }}これの利点は、各コンポーネントの対応するアクションは、実装したいジェネリックをベースアクションに伝えるだけで、独自のロジックを完了する必要があることです。 ActionSupportを実装する各アクションについて、これは基本的で考えやすいソリューションです。
次に、各アクションで、サービスコンポーネントが呼び出され、独自の関数を実装します。各アクションでは、@Component( "DepartmentAction")および@scope( "Prototype")アノテーションが使用されます。ただし、テストを練習すると、java.lang.nosuchmethodexception:com.sun.proxy。$ proxy58.list()例外が表示されます。確認した後、理由は次のとおりです。
BaseActionは抽象的であり、@Transactionalを追加することは意味がありません。
@TransactionalはSpringによって管理されます。 Springによって管理されるオブジェクトは、エージェントとして生成する必要があります。抽象クラスの場合、オブジェクトに新しくすることはできません。抽象クラスの具体的な実装クラスのみが、春ごとにプロキシできます。
したがって、BaseActionで@Transactionalを削除することがこの質問の理由です。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!