インターセプター内でもJdbcManagerがインジェクションされる


Action用のインターセプター内でDB接続したかったので色々試していたら、Actionと同様にJdbcManagerをpublicフィールドで定義しておけば自動的にインジェクションされた!

public class HogeInterceptor extends AbstractInterceptor {

    public JdbcManager jdbcManager;

    public Object invoke(final MethodInvocation invocation) throws Throwable {
            // ここでjdbcManagerを使ってDB接続できる
            return invocation.proceed();
    }
}

最初、SingletonS2Container.getComponent(JdbcManager.class)で取得しようとしたらExceptionが発生したので、なんとなくActionのようにpublicフィールドにセットしてみたら、ちゃんと使えました。

SAStrutsのマニュアルには特に書いていないようだけど、これはSmartDeployの為せるワザなのかな?

Seasar2.4は初めてなので、こっちのマニュアルももっと読まないと、ですね。