Interceptorむずかしい3(解決編)
id:higayasuoさんのご指摘だけでも感謝なのに、id:koichik さんもコメントにてご指摘をくださった。
Interceptor を dicon に登録してますか?
id:koichikさんのコメント
そりゃあしてますよ、もちろん。app.diconに
<component name="UserDtoAutoRetrieveInterceptor" class="kizashi.scheduler.interceptor.UserDtoAutoRetrieveInterceptor"/>
ほらね。*1
SMART deploy で自動登録なら prototype になるはずですが,その場合のコンポーネント名は先頭が小文字の userDtoAutoRetrieveInterceptor になるはずなので,自動登録じゃないのかな,と.
id:koichikさんのコメント
dicon に定義してるとすると,デフォルトは singleton なので,.interceptor パッケージにあれば自動登録されます.
やばい。そうなのか、そういうことなのか。ええかええか、ええのんか。
ということで自動登録にすることにしました。
以下、修正点
- app.diconに定義した上記定義をコメントアウト、いや、思い切って削除
- 自作インターセプターのpackageは図らずも
.interceptorとしていたので、そのまま。 - その削除した定義ではnameをUserDtoAutoRetrieveInterceptorとしていたので、addCustomizer で記述したインターセプタのnameをuserDtoAutoRetrieveInterceptorに修正。
修正というか、そもそも余計なことをしていたと・・・。
以下、動作確認
Aさんでログインした場合
Interceptor ###kizashi.scheduler.dto.UserDto@96ac47
Action ###kizashi.scheduler.dto.UserDto@96ac47
Bさんでログインした場合
Interceptor ###kizashi.scheduler.dto.UserDto@1d2052b
Action ###kizashi.scheduler.dto.UserDto@1d2052b
ええやないですか。
というわけでうまくいきました。ご指摘ありがとうございましたm(_ _)m
*1:ここでなんでnameの先頭文字を小文字にしていなかったのだろうかと後悔