问题描述
我有以下课程:
public class MyClass {
@Inject
private MyAnotherClass myAnotherClass;
public MyClass() {
//Perform operations on myAnotherClass.
}
}
我需要在构造函数中执行一些操作,这些操作需要myAnotherClass
的实例.不幸的是myAnotherClass
是在构造函数中的代码运行后注入的,这意味着我要在null
...
I need to do some things in constructor which require an instance of myAnotherClass
. Unfortunately myAnotherClass
is injected after code in constructor is ran, which means I am performing operations on null
...
我当然可以直接在构造函数中实例化它的经典方式(MyAnotherClass myAnotherClass = new MyAnotherClass()
),但我认为在这种情况下这样做是不正确的.
I could of course instantiate it the classic way (MyAnotherClass myAnotherClass = new MyAnotherClass()
) directly in constructor, but I don't think it is the right thing to do in this situation.
您会提出什么解决方案来解决这个问题?
What solutions would you suggest to solve this problem?
推荐答案
最佳选择:
public class MyClass {
private final MyAnotherClass myAnotherClass;
public MyClass(MyAnotherClass other) {
this.myAnotherClass = other;
// And so forth
}
}
然后,T5-IoC将使用构造函数注入,因此无需自己新建" MyClass
.有关更多信息,请参见定义Tapestry IOC服务.
T5-IoC will then use constructor injection so there's no need to 'new' up MyClass
yourself. See Defining Tapestry IOC Services for more info.
或者:
public class MyClass {
@Inject
private MyAnotherClass myAnotherClass;
@PostInjection
public void setupUsingOther() {
// Called last, after fields are injected
}
}
这篇关于Tapestry IoC构造函数和注入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!