Guice を JSF 1.2 (Sun RI) アプリケーションに統合しようとしています。マネージド Bean に対して次のことを実行できるようにしたいと考えています。
- Guice
@Inject
アノテーションを使用して依存関係を注入してから、 @PostConstruct
アノテーションを使用して初期化を実行する
私の問題は、アノテーションが処理さ@PostConstruct
れる前にメソッドが常に呼び出されることです。@Inject
この問題の解決策を知っている人はいますか?
管理対象 Bean:
public final class Foo {
@Inject private BazService bazService;
private Baz baz;
@PostConstruct
public void init() {
bar = bazService.loadBaz();
}
public void setBazService(BazService bazService) {
this.bazService = bazService;
}
}
マネージド Bean 宣言:
<managed-bean>
<managed-bean-name>foo</managed-bean-name>
<managed-bean-class>bean.Foo</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>id</property-name>
<value>#{param.id}</value>
</managed-property>
</managed-bean>
Guice バインディング:
public final class MyGuiceModule extends AbstractModule {
@Override
protected void configure() {
bind(BazService.class).to(DummyBazService.class).in(Scopes.SINGLETON);
}
}
私は次のことを試しました:
- 手動で呼び出す
Injector.injectMembers(Object)
(@PostConstruct
スーパークラスでは処理されません) - カスタムを使用する
VariableResolver
(前に@PostConstruct
処理されます)@Inject
- MyFaces の使用
GuiceResolver
(まったく機能していないように見えた - おそらくこの問題に関係している)
これが物事へのアプローチの間違った方法であると思われる場合は、他のオプションを検討させていただきます...どんな助けにも感謝します。
編集
Guice 1.0 を使用していました。Guice 2.0 にアップグレードしましたが、問題は残っています。私の問題に関連していると思われる議論をいくつか見つけました...しかし、この情報の使い方がわかりません:(