是否可以在 @RequiredArgsConstructor(onConstructor = @__(@Autowired)) 中添加限定符?

2022-08-31 12:11:37

如果我想在构造函数依赖关系注入上使用注释,我会有如下内容:@Qualifier

public class Example {

    private final ComponentExample component;

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

我知道龙目岛用于减少样板代码而不必包含构造函数的注释如下:但这仅适用于没有限定符的属性。@RequiredArgsConstructors(onConstructor=@__(@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

这是最近在最新的龙目岛1.18.4中引入的,我在我的博客文章中写过它,我很自豪地说我是推动该功能实现的主要驱动力之一。


答案 2

您可以使用弹簧技巧来限定字段,方法是使用所需的限定符命名字段,而无需@Qualifier注释。

@RequiredArgsConstructor
public class ValidationController {

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

推荐