Внедрить объект класса в другой класс, не добавляя его в конструктор - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть класс 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 ...'
}

I я не хочу нового члена класса в конструкторе, так как я использовал класс-обработчик во многих местах в моем сервисе, что если я добавлю новый член класса, мне придется обновить код во всех этих местах, чтобы добавить новый член в конструктор. Я хочу, чтобы новый член был исключен из конструктора класса 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 ...`

1 Ответ

0 голосов
/ 04 февраля 2020
  • Сначала вы должны удалить аннотацию @NotNull и модификатор final из поля Controller, так как lombok подберет его для @RequiredArgsConstructor. В любом случае final следует удалить, поскольку компилятор требует, чтобы он был назначен конструктором, а вы конкретно не хотите устанавливать его в конструкторе . Если вы хотите сохранить @NotNull, посмотрите и lombok '@SomeArgsConstructor, где вы явно определите, какие аргументы будут установлены конструктором.
  • , затем добавьте аннотацию @Inject к сеттер для контроллера: @Inject public void setController(Controller controller) {this.controller = controller;} ... так что это может быть введено путаницей за пределы конструктора.
...