我想創建一個bean,它具有屬性文件中的值。我做了這樣的事情:如何從構造函數訪問@Value註釋變量?
@Component
public class MainNavs implements Iterable<Nav>{
@Value("${newshome.navs.names}")
String[] names;
@Value("${newshome.navs.ids}")
String[] ids;
final private List<Nav> navs = new ArrayList<Nav>();
public MainNavs() throws Exception {
for (int i = 0; i < names.length; i++) {
navs.add(new Nav(names[i], ids[i]));
}
}
public Iterator<Nav> iterator() {
Iterator<Nav> n = navs.iterator();
return n;
}
public class Nav {
private String name;
private String id;
private String imageNumber;
public Nav(String name, String id, String imageNumber) {
this.name = name;
this.id = id;
}
//....
}
}
但是,當我自動裝配這樣@Autowired MainNavs navs;
,它使NullPointerException
因爲names
和ids
當它試圖訪問這些構造中並沒有啓動。
如果我提出了一些方法,如init()
並試圖用它啓動,沒有任何問題。
public init() throws Exception {
for (int i = 0; i < names.length; i++) {
navs.add(new Nav(names[i], ids[i]));
}
}
但是,我不想手動啓動。我可以在構造函數中啓動它嗎?還是有其他的選擇?
你應該指定使用什麼版本的spring,並將你的上下文xml(revelant部分)添加到你的問題中。這個http://forum.springsource.org/showthread.php?69602-Value-and-PropertyPlaceholderConfigurer可能也有幫助(差異順便說一句'#{...}'和'$ {...}') – 2011-08-31 05:41:17