- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此代码位于 app/文件夹中:
public class GuiceConfiguration extends AbstractModule {
@Override
protected void configure() {
bind(KafkaConnection.class).asEagerSingleton();
}
}
@Singleton
public class KafkaConnection {
public KafkaConnection(){
try {
ServiceUtils.startKafka();
} catch (IOException e) {
PlayLoggerUtils.logError("[Global]", this.getClass(), e);
}
}
public KafkaConnection(ApplicationLifecycle lifecycle) {
lifecycle.addStopHook(() -> {
PlayLoggerUtils.logDebug("Kafka shutting down", this.getClass());
ServiceUtils.shutDownKafka();
return CompletableFuture.completedFuture(null);
});
}
}
在应用程序配置中
play.module.enabled += "GuiceConfiguration"
仅当我在 Controller 中调用注入(inject)时,该类才会被初始化。它不会在应用程序启动时加载。并且停止钩子(Hook)也没有被执行(尝试使用 ctrl+d 并在生产模式下不强制杀死)。
最佳答案
首先,你的类应该只有一个构造函数。如果使用默认构造函数创建实例,它肯定不会注册到应用程序生命周期。
此外,提供带有实现的接口(interface)是一种很好的做法。 KafkaConnection 应该是一个可以有多个实现的接口(interface)(允许您在必要时 stub )。
对于不立即加载实例,您可以在模块中使用 .asEagerSingleton()
以及 @Singleton
注释。根据Guice docs :
PRODUCTION DEVELOPMENT
.asEagerSingleton() eager eager
.in(Singleton.class) eager lazy
.in(Scopes.SINGLETON) eager lazy
@Singleton eager lazy
@Singleton 应该在开发模式下延迟加载。尽管处于生产模式,但应该立即加载。
因此,一个有效的实现(也在您的开发环境中)可能看起来像这样:
public class GuiceConfiguration extends AbstractModule {
@Override
protected void configure() {
bind(KafkaConnection.class).to(DefaultKafkaConnection.class).asEagerSingleton();
}
}
public interface KafkaConnection {}
// No annotation
public class DefaultKafkaConnection implements KafkaConnection {
// No default constructor, but the ApplicationLifecycle needs
// to be injected
@Inject
public KafkaConnection(ApplicationLifecycle lifecycle) {
try {
ServiceUtils.startKafka();
} catch (IOException e) {
PlayLoggerUtils.logError("[Global]", this.getClass(), e);
}
lifecycle.addStopHook(() -> {
PlayLoggerUtils.logDebug("Kafka shutting down", this.getClass());
ServiceUtils.shutDownKafka();
return CompletableFuture.completedFuture(null);
});
}
}
关于java - 玩java 2.5 guice急切加载并停止钩子(Hook)不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38072543/
我有一个案例,在大多数情况下,对象之间的关系是这样的,因此在关系上预先配置一个渴望(加入)的负载是有意义的。但是现在我遇到了一种情况,我真的不想完成急切的加载。 我是否应该从关系中删除连接负载并将所有
在我的 Grails 项目中,我有以下类: class A { static hasMany = [cs:C] } class B { static hasMany = [cs:C]
想象一下以下简化的 DI 模型: @ApplicationScoped public class A { private B b; @Inject public A(B b)
我使用 MapLoader 将数据从数据存储初始加载到 Hazelcast (InitialLoadMode = EAGER)。我需要从一个物化 View 中加载这些数据,该 View 是为了在加载过
我使用 Hibernate Envers 4.3.10.Final。我有以下两个 JPA 类: public class Factory { private int factoryID;
EJB 似乎被延迟加载 - 每当访问时。 但是,我想急切地初始化它们 - 即每当容器启动时。这是如何实现的(尤其是在 JBoss 中) This topic给出了一些提示,但不是很令人满意。 最佳答案
我是一名优秀的程序员,十分优秀!