是否可以在@RequiredArgsConstructor(onConstructor = @__(@Autowired)) 中添加限定符?
Is it possible to add qualifiers in @RequiredArgsConstructor(onConstructor = @__(@Autowired))?
如果我想在构造函数依赖注入中使用注解 @Qualifier
,我会得到如下内容:
public class Example {
private final ComponentExample component;
@Autowired
public Example(@Qualifier("someComponent") ComponentExample component) {
this.component = component;
}
}
我知道 Lombok 的注释可以减少样板代码并且不必包含构造函数,如下所示:@RequiredArgsConstructors(onConstructor=@__(@Inject))
但这仅适用于没有限定符的属性。
有人知道是否可以在 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
中添加限定词吗?
编辑:
最终可能这样做!您可以像这样定义服务:
@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 中引入的,我在我的博文中写过,我很自豪地说我是推动该功能实现的主要推动力之一。
您可以使用 spring 技巧来限定字段,方法是使用没有 @Qualifier 注释的所需限定符命名它。
@RequiredArgsConstructor
public class ValidationController {
//@Qualifier("xmlFormValidator")
private final Validator xmlFormValidator;
我没有测试接受的答案是否有效,但我认为更简洁的方法是将成员变量重命名为您想要限定的名称,而不是创建或编辑 lombok 的配置文件。
// Error code without edit lombok config
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class Foo {
@Qualifier("anotherDao") UserDao userDao;
}
只需删除@Qualifier 并更改变量的名称
// Works well
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class Foo {
UserDao anotherDao;
}
如果我想在构造函数依赖注入中使用注解 @Qualifier
,我会得到如下内容:
public class Example {
private final ComponentExample component;
@Autowired
public Example(@Qualifier("someComponent") ComponentExample component) {
this.component = component;
}
}
我知道 Lombok 的注释可以减少样板代码并且不必包含构造函数,如下所示:@RequiredArgsConstructors(onConstructor=@__(@Inject))
但这仅适用于没有限定符的属性。
有人知道是否可以在 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
中添加限定词吗?
编辑:
最终可能这样做!您可以像这样定义服务:
@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 中引入的,我在我的博文中写过,我很自豪地说我是推动该功能实现的主要推动力之一。
您可以使用 spring 技巧来限定字段,方法是使用没有 @Qualifier 注释的所需限定符命名它。
@RequiredArgsConstructor
public class ValidationController {
//@Qualifier("xmlFormValidator")
private final Validator xmlFormValidator;
我没有测试接受的答案是否有效,但我认为更简洁的方法是将成员变量重命名为您想要限定的名称,而不是创建或编辑 lombok 的配置文件。
// Error code without edit lombok config
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class Foo {
@Qualifier("anotherDao") UserDao userDao;
}
只需删除@Qualifier 并更改变量的名称
// Works well
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class Foo {
UserDao anotherDao;
}