簡體   English   中英

在javaConfig中使用@Qualifier + @Bean(autowire = Autowire.BY_TYPE)

[英]using @Qualifier + @Bean(autowire=Autowire.BY_TYPE) in javaConfig

我有一個具有依賴類型的地址的Employee bean。 我正在嘗試在javaConfig中配置自動裝配。 但是得到NoQualifyingBeanException
雖然我使用@Qualifier()注釋如下:

@Configuration
public class MyConfig {

    @Bean(name="addr1")
    public Address address() {      
        return new Address("Hello","hi",112233);
    }

    @Bean(name="address")
    public Address addressAgain() {
        return new Address("See You","Bi",114422);
    }

    @Bean(name="emp",autowire=Autowire.BY_TYPE)
    @Qualifier("addr1")
    public Employee employee() {

        Employee e = new Employee();
        e.setName("Raghu");
        e.setEmpID(111);
        //e.setAddress(address());

        return e;
    }

}

在每個@Bean方法中指定不同的name屬性是不夠的。
您應該考慮將其中一個bean標記為@Primary

@Primary
@Bean(name = "address")
public Address addressAgain() {
    return new Address("See You");
}

並讓其他人不要:

@Bean(name="addr1")
public Address address() {      
    return new Address("Hello","hi", 112233);
}

請注意,您無需在employee()方法中添加@Qualifier("addr1")批注即可自動裝配addr1 bean。
當您通過@Bean方法設置依賴項時,Spring已經知道您所引用的Address Bean實例: address()

這樣就足夠了:

@Bean(name = "emp", autowire = Autowire.BY_TYPE)
public Employee employee() {
    Employee e = new Employee();
    e.setName("Raghu");
    e.setAddress(address());
    return e;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM