Можно добавить квалификаторы в @RequiredArgsConstructor (onConstructor = @__ (@Autowired))?

Если бы я хотел использовать аннотацию @Qualifier для инъекции зависимостей конструктора, у меня было бы примерно следующее:

public class Example {

    private final ComponentExample component;

    @Autowired
    public Example(@Qualifier("someComponent") ComponentExample component) {
        this.component = component;
    }
}

Я знаю аннотацию lombok, чтобы уменьшить код шаблона и не включать конструктор, будет следующим: @RequiredArgsConstructors([email protected]__(@Inject)), но это работает только со свойствами без квалификаторов.

Кто-нибудь знает, можно ли добавить квалификаторы в @RequiredArgsConstructor(onConstructor = @__(@Autowired))?

Ответ 1

РЕДАКТИРОВАТЬ:

Это, наконец, возможно ! Вы можете иметь сервис, определенный следующим образом:

@Service
@RequiredArgsConstructor
public class SomeRouterService {

   @NonNull private final DispatcherService dispatcherService;
   @Qualifier("someDestination1") @NonNull private final SomeDestination someDestination1;
   @Qualifier("someDestination2") @NonNull private final SomeDestination someDestination2;

   public void onMessage(Message message) {
       //..some code to route stuff based on something to either destination1 or destination2
   }

 } 

При условии, что у вас есть файл lombok.config, подобный этому, в корне проекта:

# Copy the Qualifier annotation from the instance variables to the constructor
# see https://github.com/rzwitserloot/lombok/issues/745
lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier

Это было недавно введено в последней версии lombok 1.18.4, я написал об этом в своем блоге, и я с гордостью могу сказать, что я был одной из главных движущих сил, продвигающих реализацию этой функции.

Ответ 2

Вы можете использовать трюк Spring для уточнения поля, назвав его нужным квалификатором без аннотации @Qualifier.

@RequiredArgsConstructor
public class ValidationController {

  //@Qualifier("xmlFormValidator")
    private final Validator xmlFormValidator;

Ответ 3

Мне кажется, что

@RequiredArgsConstructor([email protected]__(@Autowired))

тоже работает (возможно, я использую новый ломбок?)

пример кода