是否可以在构造函数上使用@Resource?

2022-09-02 08:59:08

我想知道是否有可能在构造函数上使用注释。@Resource

我的用例是,我想连接一个名为 .bar

public class Foo implements FooBar {

    private final Bar bar;

    @javax.annotation.Resource(name="myname")
    public Foo(Bar bar) {
        this.bar = bar;
    }
}

我收到一条消息,指出此位置不允许使用 。有没有其他方法可以连接最终字段?@Resource


答案 1

来源:@Resource

@Target({TYPE, FIELD, METHOD})
@Retention(RUNTIME)
public @interface Resource {
    //...
}

此行:

@Target({TYPE, FIELD, METHOD})

意味着此注释只能放置在类,字段和方法上。构造函数丢失。


答案 2

为了补充Robert Munteanu的答案并供将来参考,以下是和 on 构造函数的使用方式:@Autowired@Qualifier

public class FooImpl implements Foo {

    private final Bar bar;

    private final Baz baz;

    @org.springframework.beans.factory.annotation.Autowired
    public Foo(Bar bar, @org.springframework.beans.factory.annotation.Qualifier("thisBazInParticular") Baz baz) {
        this.bar = bar;
        this.baz = baz;
    }
}

在这个例子中,它只是自动连接的(即在上下文中只有一个该类的豆子,所以Spring知道要使用哪个),同时有一个限定符来告诉Spring我们要注入该类的哪个特定豆子。barbaz


推荐