带有Guice注入字段的Java构造函数以及非注入字段

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 方法(其中注入了一些更复杂的依赖项)。此外,如果一个字段频繁更改(如“状态”字段所暗示的那样),那么它也不是注入的良好候选者。