[英]Dependency injection from Quarkus (java)
同学们,你们好! 是否可以在通过“new”运算符创建的类中注入 bean? 例如:
public class TestClass implements Callback {
@Inject
TestClassRepository repository;
//just only methods...
}
'TestClass' 是从另一个类创建的:
Flyway.configure().collbacks(new TestClass()).load();
我对此有疑问,因为 TestClass 内部的“repository.anyMethods()”会创建“NullPointer”异常。 “TestClassRepository”标有“@ApplicationScoped”和“@Startup”注释。
最简单的方法是使用构造函数注入,这将使您能够在手动创建
TestClass<\/code>时传递一个实例:
new TestClass(myTestClassRepository); // <- repository could e.g. have been injected into the calling class / ...
@Singleton
public class TestConfig {
@javax.enterprise.inject.Produces
public TestClass testClass() {
return new TestClass();
}
}
另一个用@ApplicationsScoped
或@Singleton
注释的类:
@Inject
public void method(TestClass testClass) {
Flyway.configure().collbacks(testClass).load();
// your code
}
如果您自己调用构造函数 ( new TestClass()
) 创建对象,则 quarkus 不会操作该对象,也不会注入存储库。
不,您不能在使用 new 关键字实例化的类中注入 bean。 但是您仍然可以像这样找到解决方法:
@Dependent
public class BeanFactory {
@Inject
TestClassRepository repository
@Produces
public TestClass createTestClass() {
return new TestClass(this.repository);
}
您可以在此处找到更多详细信息: Quarkus 上下文和依赖注入
您还可以为不同的配置文件定义多个 bean,如下面的几行所述
这意味着您可以为您的测试创建一个存储库,并为 prod 或任何最适合您的情况的存储库创建一个。
此外,我认为注释“@Startup”不会向您的 TestClassRepository bean 添加任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.