読者です 読者をやめる 読者になる 読者になる

wicket-auth-roles と guice

wicket-auth-rolesでAuthenticatedWebSession#authenticateの中でDBにアクセスしてユーザの認証したい時の話。

ここでDIを連携している場合、SessionのサブクラスだとアノテーションとかつけておいてもServiceやDaoをインジェクションしてくれない。Springとの連携だとオンストラクタ内でInjectorHolder.getInjector().inject(this)を呼び出せばよいみたい。
http://d.hatena.ne.jp/hayassh/20090415/1239797052

ただGuiceだと、この方法ではダメみたい。次みたいにしたらうまくうごいた。

public class LoginSession extends AuthenticatedWebSession
{
    @Inject
    private Service service;
    public LoginSession(Request request)
    {
        super(request);
        Application application = AuthenticatedWebApplication.get();
        Injector injector = ((GuiceInjectorHolder) application.getMetaData(GuiceInjectorHolder.INJECTOR_KEY)).getInjector();
        injector.injectMembers(this);
    }
    ...
}