Java类应该具有int MY_LISTENER_PORT
,并从属性文件中注入my.listener.port值:
@Singleton
public class MyListener {
@Inject
@Named("my.listener.port")
private int MY_LISTENER_PORT;
public MyListener(){
start();
}
public void start() {
System.out.println("Port: " + MY_LISTENER_PORT);
}
}
在Guice中与Guice单独绑定:
public class BootstrapServletModule extends ServletModule {
@Override
protected void configureServlets() {
...
bind(MyListener.class).asEagerSingleton();
...
}
}
有时当Tomcat启动时,我会正确地将值注入MY_LISTENER_PORT,例如:" Port:9999"。有时,它没有注入,我得到了#34; Port:0"。为什么会这样?
答案 0 :(得分:4)
这可能只是构造函数在“MY_LISTER_PORT”之前发生的事情。有机会被注射
https://github.com/google/guice/wiki/InjectionPoints
https://github.com/google/guice/wiki/Bootstrap
构造函数在方法和字段之前注入,因为您必须在注入其成员之前构造实例。
注射按特定顺序进行。注入所有字段 然后是所有方法。在字段内,注入了超类型字段 在子类型字段之前。类似地,注入超类型方法 在子类型方法之前。
用户构造函数注入
@Inject
public MyListener(@Named("my.listener.port") int port){
this.MY_LISTER_PORT = port;
start();
}