我有一个处理程序类,我在其中使用 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 注入。