在另一个类中注入类对象,而不将其添加到构造函数中



我有一个处理程序类,我在其中使用 lombok 注入依赖项并创建所需的 args 构造函数。该类如下所示:

@RequiredArgsConstructor(onConstructor = @__(@Inject))
class Handler {
private final @NonNull ObjectMapper objectMapper;
private final @NonNull UserAddressBookDao userAddressBookDao;
//Some methods below
}

现在我必须在处理程序类中包含/注入另一个类,即控制器类对象,因此更新的处理程序类将是:

@RequiredArgsConstructor(onConstructor = @__(@Inject))
class Handler {
private final @NonNull Mapper mapper;
private final @NonNull UserDao userDao;
//newly added class member
private final @NonNull Controller controller;
//Some methods below ...'
}

我不希望构造函数中的新类成员,因为我在服务中的很多地方都使用了处理程序类,如果我添加新的类成员,我将不得不在所有这些地方更新代码以将新成员添加到构造函数中。我希望将新成员从处理程序类的构造函数中排除,以便避免这种情况。控制器类也有很多成员,因为如果我尝试在要求的地方初始化它将是一个问题。那么,无论如何,我可以将控制器注入我的处理程序类中,而无需将其包含在构造函数中。提前非常感谢您,如果问题听起来太模糊,请原谅。 控制器类如下所示:

@Singleton
@RequiredArgsConstructor(onConstructor = @__(@Inject))
public class Controller {
@NonNull
private final ABCService abcClient;
@NonNull
private final DdbDao DdbDao;
@NonNull
private final ServiceAccessor serviceAccessor;
`Some methods below ...`
首先,
  • 您必须从字段中删除@NotNull注释和final修饰符Controller因为龙目岛会将其拾取@RequiredArgsConstructor
    无论如何都应该删除final,因为编译器要求它由构造函数分配,而您特别不想在构造函数中设置它
    如果你想保留@NotNull那么看看和lombok@SomeArgsConstructor,你在其中明确定义构造函数将设置哪些参数。
  • 然后将@Inject注释添加到控制器的 setter 中

    @Inject public void setController(Controller controller) {this.controller = controller;}......因此,它可以由构造函数外部的 GUINCE 注入。

最新更新