2016-12-03 103 views
0

我是新來的春天,並陷入了一些問題,如下所述 -如何在基於Spring的Java配置中正確使用@Inject註解?

我有一個班級的顏色與兩個不同的實施名稱爲紅色和藍色,我想注入顏色列表使用@inject

Below is my ApplicationConfiguration class 

package org.arpit.java2blog.config; 

import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.Resource; 
import javax.inject.Inject; 

import org.arpit.java2blog.model.Country; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.Import; 

@Configuration 
@Import(CountryConfig.class) 
public class ApplicationConfiguration { 

    @Inject 
    private List<Color> colorList; 

    @Bean 
    public List<Color> colorList() { 
     System.out.println("Second"); 
     List<Color> aList = new ArrayList<Color>(); 
     aList.add(new Blue()); 
     return aList; 
    } 

} 

,但得到的例外是

注射自動裝配Autowired依賴的失敗;嵌套異常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:private java.util.List org.arpit.java2blog.config.ApplicationConfiguration.colorList;嵌套0​​例外是 org.springframework.beans.factory.NoSuchBeanDefinitionException:[org.arpit.java2blog.config.Color]發現 依賴性[org.arpit.java2blog.config.Color的集合]沒有類型的 預選賽豆:預期至少有1個豆符合此 依賴關係的自動導向候選。依賴註解:{@ javax.inject.Inject()}

+0

你怎麼課'顏色'看起來像?它是否有'@ Component'註釋?它在Spring上下文中可用嗎? – questionare

+0

不,它只是一個簡單的普通類,沒有@component – CoreThought

+0

不確定,但同樣的東西可以正常使用@resource註釋 – CoreThought

回答

1

使用@InjectcolorList填入正確的方法顯示在下面的代碼與內聯註釋:

@Configuration 
@Import(CountryConfig.class) 
public class ApplicationConfiguration { 

    @Inject 
    private List<Color> colorList; 

    @Bean 
    public Color color() { 
     return new Blue();//injects Blue object to colorList 
    } 

    @Bean 
    public Color color() { 
     return new Red();//injects Red object to colorList 
    } 
} 

此外,你可以很正如Spring doc here中所解釋的那樣,使用@Order以在colorList的特定索引處注入Color對象。

該解決方案是工作的罰款,如果我從兩個類中刪除@Component註解除去成分

後 紅藍只提供一個bean類型當你與@Component標記您的bean類(事實上對於任何Spring stereotype註釋),這些bean將有資格注入,並且會自動加載到您的colorList。因此,當您提供@Bean註釋方法並給出多一個對象時,它也會被添加到列表中,但一般來說,您將使用@Component或使用@Bean加載列表,但不能同時加載這兩個對象。

相關問題