Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在另一个类中注入类对象,而不将其添加到构造函数中_Java_Dependency Injection_Constructor_Guice_Lombok - Fatal编程技术网

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

Java 在另一个类中注入类对象,而不将其添加到构造函数中,java,dependency-injection,constructor,guice,lombok,Java,Dependency Injection,Constructor,Guice,Lombok,我有一个处理程序类,在其中我使用lombok注入依赖项并创建所需的args构造函数。该类如下所示: @RequiredArgsConstructor(onConstructor = @__(@Inject)) class Handler { private final @NonNull ObjectMapper objectMapper; private final @NonNull UserAddressBookDao userAddressBookDao; //Some met

我有一个处理程序类,在其中我使用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 ...'
}
我不希望新的类成员出现在构造函数中,因为我在我的服务中的很多地方都使用了handler类,如果我添加了一个新的类成员,我必须在所有这些地方更新代码,才能将新成员添加到构造函数中。我希望将新成员从处理程序类的构造函数中排除,以便避免这种情况。此外,控制器类有很多成员,因为如果我尝试在所需的位置初始化它,将是一个问题。那么,我是否可以将控制器注入到我的处理程序类中,而不将其包含在构造函数中。提前非常感谢,如果问题听起来太模糊,请原谅。 控制器类如下所示:

@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
    @someargsconstuctor
    ,其中您明确定义了构造函数将设置哪些参数
  • 然后将
    @Inject
    注释添加到控制器的setter:
    @Inject-public-void-setController(controller-controller){this.controller=controller;}

    。。。因此,它可以由构造函数外部的guice导入

Hi,您想将控制器对象注入
处理程序
类中,对吗?控制器类有一个
@RestController
注释?您好,是的,我有,但控制器类没有@RestController注释。这只是给类指定的控制器名称。请您也添加控制器的代码好吗?在Spring应用程序中,如果控制器公开API,则应该具有该注释:)我刚刚添加了该注释。它本质上不是春天。我们使用Lombok进行注释。您想用它公开API吗?我没有使用Spring,使用Lombok注释和google guice进行依赖项注入。您的问题下有Spring not guice作为标记。。。让我修复Lombok还没有@SomeArgsConstructor的问题,关于方法注入的解决方案,我正在尝试相同的方法,但控制器是空的。