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

时间:2016-07-24 07:19:43

标签: java spring dependency-injection lombok

如果我想在构造函数依赖注入上使用注释@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))添加限定符?

3 个答案:

答案 0 :(得分:2)

您可以使用spring技巧来限定字段,方法是将字段命名为所需的带有@Qualifier批注的限定符。

@RequiredArgsConstructor
public class ValidationController {

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

答案 1 :(得分:0)

对我来说似乎是

@RequiredArgsConstructor(onConstructor=@__(@Autowired))

也在工作(可能我正在使用更新的lombok?)

example code

答案 2 :(得分:0)

我还没有测试接受的答案是否运作良好,但是我认为不是创建或编辑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;
}