gpt4 book ai didi

java - 将类对象注入(inject)另一个类中,而不将其添加到构造函数中

转载 作者:行者123 更新时间:2023-12-01 18:35:37 27 4
gpt4 key购买 nike

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

@RequiredArgsConstructor(onConstructor = @__(@Inject))
class Handler {
private final @NonNull ObjectMapper objectMapper;
private final @NonNull UserAddressBookDao userAddressBookDao;

//Some methods below
}

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

@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 ...'
}

我不希望在构造函数中使用新的类成员,因为我在服务中的很多地方使用了处理程序类,如果我添加新的类成员,我将必须在所有这些地方更新代码以添加新成员进入构造函数。我希望将新成员从 Handler 类的构造函数中排除,这样我就可以避免这种情况。此外, Controller 类有很多成员,因为如果我尝试在所需的位置进行初始化,它将成为一个问题。那么,我是否可以将 Controller 注入(inject)到我的处理程序类中,而不将其包含在构造函数中。预先非常感谢您,如果问题听起来太模糊,请原谅。 Controller 类如下所示:

@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 ...`

最佳答案

  • 首先,您必须从 Controller 字段中删除 @NotNull 注释和 final 修饰符,因为 lombok 会选择@RequiredArgsConstructor
    final 无论如何都应该被删除,因为编译器要求它由构造函数分配,而你特别不希望在构造函数中设置它
    如果您想保留@NotNull,请查看lombok@SomeArgsConstructor 您可以在其中显式定义构造函数将设置哪些参数。
  • 然后将 @Inject 注解添加到 controller 的 setter 中:
    @Inject public void setController(Controllercontroller) {this.controller =controller ;}
    ...所以它可以被构造函数外部的 guice 注入(inject)。

关于java - 将类对象注入(inject)另一个类中,而不将其添加到构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60055007/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com