2

aop によってコントローラに http リクエストを記録しようとしています。ただし、アスペクトコードでは、

    httpServletRequest.getInputStream()

その場合、リクエスト データはメイン フローで取得できません。

そこで、リクエスト文字列を渡すコントローラーで別のパブリックメソッドを作成しました

    public String processRequest(String data){...}

このメソッドは、「データ」をログに記録するためのポイントカットです。

しかし問題は、このメソッドのポイント カットが Spring で識別できないようで、このメソッドのログが記録されていないことです。これについて助けが必要です。

aop の定義は次のとおりです。

     <bean id="myLogger" class="com.my.MyLogger" />

<aop:config>
    <aop:aspect id="Log" ref="myLogger">
        <aop:around  method="log" pointcut="execution(public * com.my.controller.processRequest(..))" />
    </aop:aspect>
</aop:config>
4

1 に答える 1

0

Spring AOP はデフォルトで AOP プロキシを使用します。したがって、元の Bean は生成されたプロキシ Bean でラップされ、すべての「外部」呼び出しはプロキシを通過します。内部メソッド呼び出し (同じ Bean 内) は、プロキシをバイパスします。

ここでうまく説明されています: http://static.springsource.org/spring/docs/2.5.5/reference/aop.html#aop-understanding-aop-proxies

于 2012-09-20T07:04:00.513 に答える