2015-03-02 48 views
1

我在xml配置定義爲一個bean:春:添加自動裝配Autowired屬性列出

<bean id="dataService" class="com.sample.DataService" /> 

在另一類是作爲資源,並把在列表中。

@Resource(name = "dataService") 
private Driver dataService; 

private List<Driver> drivers = new ArrayList<Driver>() { 
     { 
      drivers.add(dataService); 
     } 
}; 

我上線drivers.add(dataService);得到NullPointer Exception我想,因爲它是自動裝配的DataService不應爲null。我在這裏錯過了什麼?

回答

2

可以填充在適當的callback您的收藏:

@Resource(name = "dataService") 
private Driver dataService; 

private List<Driver> drivers; 

@PostConstruct 
public void setup(){ 
    drivers = new ArrayList<Driver>(); 
    drivers.add(dataService); 
} 
2

autowire-int在創建bean後完成。

嘗試使用構造函數注入並將bean添加到收縮器中的列表中。

private Driver dataService; 

private List<Driver> drivers; 
@Autowired 
public MyBean(Driver driver){ 
    drivers = new ArrayList<Driver>(); 
    drivers.add(driver); 
} 
0

你沒有得到的NullPointerException因爲DataService是否null。您正在獲取NullPointerException,因爲您正嘗試向未被初始化的List添加一個值。當您從子類引用drivers時,您正在將一個新的,匿名的ArrayList實例分配到drivers。如果您從drivers.add(dataService)行中刪除「驅動程序」,則不會得到NullPointerException

但是,您仍然留下的事實dataServicenull,直到使用默認構造函數或使用依賴注入的參數化構造函數初始化對象。這是我會怎麼做:

@Autowired 
private List<Driver> drivers; 

Spring將自動創建所需類型的Listall可用豆類。無需@PostConstruct或其他回調。

相關問題