Base Class 注入什么时候发生在 Micronaut 中
When does Base Class Injection happen in Micronaut
我在 micronaut 中使用继承。我有一个应用程序执行类似于以下内容的操作
@Prototype
class ValueHolder {
public void doSomthing();
}
@Prototype
class Base {
@Inject
ValueHolder value;
Base() {
// Does Something
}
}
@Prototype
class Parent extends Base {
Parent() {
super()
value.doSomthing(); // NullPointerException
}
}
我想知道为什么 value
仍然是 null
以及继承是否是 micronaot 中的反模式。
I would like to know why value is still null and if inheritance is an
anti-pattern in micronaot.
继承不是 Micronaut 中的反模式。
您遇到的问题与 Micronaut 没有任何关系。它更多地与对象的分配方式有关。您在 Parent
构造函数中引用了 value
但 value
不可能在那时被初始化。初始化 value
属性 的代码在初始化 Parent
实例之前无法执行,但您正试图在此之前引用 value
。如果您将 Micronaut 排除在外并简单地调用 new Parent();
.
,您会看到相同的行为
不清楚在构造 Parent
时需要 value
对象做什么,但要考虑的一个选项是:
import io.micronaut.context.annotation.Prototype;
@Prototype
class Base {
ValueHolder value;
Base(ValueHolder value) {
this.value = value;
}
}
import io.micronaut.context.annotation.Prototype;
@Prototype
class Parent extends Base {
Parent(ValueHolder value) {
super(value);
value.doSomthing(); // Not NullPointerException
}
}
我在 micronaut 中使用继承。我有一个应用程序执行类似于以下内容的操作
@Prototype
class ValueHolder {
public void doSomthing();
}
@Prototype
class Base {
@Inject
ValueHolder value;
Base() {
// Does Something
}
}
@Prototype
class Parent extends Base {
Parent() {
super()
value.doSomthing(); // NullPointerException
}
}
我想知道为什么 value
仍然是 null
以及继承是否是 micronaot 中的反模式。
I would like to know why value is still null and if inheritance is an anti-pattern in micronaot.
继承不是 Micronaut 中的反模式。
您遇到的问题与 Micronaut 没有任何关系。它更多地与对象的分配方式有关。您在 Parent
构造函数中引用了 value
但 value
不可能在那时被初始化。初始化 value
属性 的代码在初始化 Parent
实例之前无法执行,但您正试图在此之前引用 value
。如果您将 Micronaut 排除在外并简单地调用 new Parent();
.
不清楚在构造 Parent
时需要 value
对象做什么,但要考虑的一个选项是:
import io.micronaut.context.annotation.Prototype;
@Prototype
class Base {
ValueHolder value;
Base(ValueHolder value) {
this.value = value;
}
}
import io.micronaut.context.annotation.Prototype;
@Prototype
class Parent extends Base {
Parent(ValueHolder value) {
super(value);
value.doSomthing(); // Not NullPointerException
}
}