将一个类对象插入另一个类,而无需将其添加到构造函数中

问题描述 投票:0回答:1

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

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

  //Some methods below
}

现在我必须在处理程序类中包含/注入另一个类,即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注入到我的处理程序类中,而不必将其包含在构造函数中。预先非常感谢您,如果问题听起来太模糊,请原谅。控制器类如下所示:

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

java dependency-injection constructor guice lombok
1个回答
0
投票
  • 首先,您必须从@NotNull字段中删除final批注和Controller修饰符,因为lombok将其用于@RequiredArgsConstructor。在任何情况下都应删除final,因为编译器要求由构造函数分配它,并且您特别不想在构造函数中设置它。如果要保留@NotNull,请查看lombok@SomeArgsConstructor,在其中明确定义要传入的参数。
  • 然后将@Autowired注释添加到controller: @Autowired setController(Controller controller) {this.controller = controller;}
  • 的设置器中
© www.soinside.com 2019 - 2024. All rights reserved.