我正在尝试将 Guice 集成到 JSF 1.2 (Sun RI) 应用程序中,并且我希望能够对我的托管 bean 执行以下操作:
@Inject
使用 Guice注解注入依赖项,然后@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,但问题仍然存在。我发现了一些似乎与我的问题有关的讨论......但我不明白如何使用这些信息:(