DeltaSpike 接口配置不可注入
DeltaSpike interface configuration not injectable
我正在按照 DeltaSpike documentation 创建一个绑定配置属性的可注入接口。
@Configuration(prefix = "application.")
public interface AppConfig {
@ConfigProperty(name = "name", evaluateVariables = false)
String getApplicationName();
}
我已经尝试通过 BeanProvider#getContextualReference
和 @Inject
使用它。
@Inject
public Framework(final AppContext context, final BeanManager beanManager, AppConfig app) {
this.appContext = context;
this.beanManager = beanManager;
logger.info("Initialization application with name {}.", app.getApplicationName());
}
Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type AppConfig with qualifiers @Default
我也收到警告:
Unsatisfied dependency: no bean matches the injection point
我试过摆弄 beans.xml
文件和 build.gradle
中的依赖项,但无济于事,与文档相比,我不确定自己做错了什么。
有人能给我指出正确的方向吗?
问题不在于 DeltaSpike,而在于 Weld,即该项目所依赖的 CDI 实现。
问题是由 Gradle 分别构建 main
和 resource
引起的,因此首先需要修改资源输出以将它们放在一起。这会将资源输出设置到 类 目录。
sourceSets {
main {
output.resourcesDir = output.classesDirs.singleFile
}
test {
output.resourcesDir = output.classesDirs.singleFile
}
}
然后,运行 使用 Gradle 而不是 IDE 的应用程序,为此,添加并配置 application
插件。这将创建一个名为 run
的 Gradle 任务。
plugins {
id "application"
id "java"
id "io.spring.dependency-management" version "1.0.9.RELEASE"
}
application {
mainClassName = "org.example.app.Main"
}
如果使用 DeltaSpike 注释,他们可能需要修改 beans.xml
以找到 all
而不是 annotated
。
包含最小 DeltaSpike / Weld / Gradle 项目的存储库:
https://gitlab.com/SethFalco/mini-deltaspike
我正在按照 DeltaSpike documentation 创建一个绑定配置属性的可注入接口。
@Configuration(prefix = "application.")
public interface AppConfig {
@ConfigProperty(name = "name", evaluateVariables = false)
String getApplicationName();
}
我已经尝试通过 BeanProvider#getContextualReference
和 @Inject
使用它。
@Inject
public Framework(final AppContext context, final BeanManager beanManager, AppConfig app) {
this.appContext = context;
this.beanManager = beanManager;
logger.info("Initialization application with name {}.", app.getApplicationName());
}
Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type AppConfig with qualifiers @Default
我也收到警告:
Unsatisfied dependency: no bean matches the injection point
我试过摆弄 beans.xml
文件和 build.gradle
中的依赖项,但无济于事,与文档相比,我不确定自己做错了什么。
有人能给我指出正确的方向吗?
问题不在于 DeltaSpike,而在于 Weld,即该项目所依赖的 CDI 实现。
问题是由 Gradle 分别构建 main
和 resource
引起的,因此首先需要修改资源输出以将它们放在一起。这会将资源输出设置到 类 目录。
sourceSets {
main {
output.resourcesDir = output.classesDirs.singleFile
}
test {
output.resourcesDir = output.classesDirs.singleFile
}
}
然后,运行 使用 Gradle 而不是 IDE 的应用程序,为此,添加并配置 application
插件。这将创建一个名为 run
的 Gradle 任务。
plugins {
id "application"
id "java"
id "io.spring.dependency-management" version "1.0.9.RELEASE"
}
application {
mainClassName = "org.example.app.Main"
}
如果使用 DeltaSpike 注释,他们可能需要修改 beans.xml
以找到 all
而不是 annotated
。
包含最小 DeltaSpike / Weld / Gradle 项目的存储库:
https://gitlab.com/SethFalco/mini-deltaspike