Nil*_*Nil 5 java constructor guice code-injection
我有一个类,它有一个构造函数,其中所有参数都由GUICE注入.
Public class Order {
private final ClassOne classOneObj;
private final ClassTwo classTwoObj;
@Inject
public order(ClassOne classOneObj, ClassTwo classTwoObj){
this.classOneObj = classOneObj;
this.classTwoObj = classTwoObj;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我想再添加一个无法注入的字段(例如,int status)变量.
首先使用所有注入的参数创建对象然后设置无法使用setter方法注入的新字段是一个好习惯吗?
我提出了另一种方法,我创建了一个工厂类,如下所示:
public class OrderFactory {
private final ClassOne classOneObj;
private final ClassTwo classTwoObj;
@Inject
public order(ClassOne classOneObj, ClassTwo classTwoObj){
this.classOneObj = classOneObj;
this.classTwoObj = classTwoObj;
}
//getter methods for all the above variables
public ClassOne getclassOneObj(){
return classOneObj;
}
....
public Order createOrder(int status) {
return new Order(status, classOneObj, classTwoObj);
}
}
Run Code Online (Sandbox Code Playgroud)
然后新的Order类看起来像
public class Order {
int status
private final ClassOne classOneObj;
private final ClassTwo classTwoObj;
public order(int status, ClassOne classOneObj, ClassTwo classTwoObj){
this.status = status
this.classOneObj = classOneObj;
this.classTwoObj = classTwoObj;
}
//getter methods for all these member variables
}
Run Code Online (Sandbox Code Playgroud)
现在要创建订单对象,我将首先创建一个OrderFactory对象,然后使用"createOrder"方法创建Order对象.
我最终编写了样板代码.不确定这是不是一个好习惯.如果这种方法是正确的还是有更好的解决方法,有人可以建议吗?
我在Google Guice中读到,发现有一个@Assisted功能用于辅助注射此类病例.但我发现这很复杂,无法说服自己,在我的情况下是否应该采用这种方法.
提前感谢任何建议或指导.
Alp*_*ure -1
您通常会注入需要花费一些精力才能构建的东西。如果您只是注入一个 int 字段,那么最好只调用对象上的 setter 方法(其中注入了一些更复杂的依赖项)。此外,如果一个字段频繁更改(如“状态”字段所暗示的那样),那么它也不是注入的良好候选者。
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |