gpt4 book ai didi

java - 如何从构造函数访问@Value注释变量?

转载 作者:行者123 更新时间:2023-12-02 13:14:46 25 4
gpt4 key购买 nike

我想制作一个具有属性文件中的值的 bean。我做了这样的事情:

@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;
}

//....
}
}

但是当我像这样 Autowiring @Autowired MainNavs navs;时,它会产生NullPointerException,因为namesids 当它尝试访问构造函数中的内容时,未启动。

如果我创建了像 init() 这样的方法并尝试使用它启动,则没有任何问题。

public init() throws Exception {            
for (int i = 0; i < names.length; i++) {
navs.add(new Nav(names[i], ids[i]));
}
}

但是,我不想手动启动。我可以在构造函数中启动它吗?或者还有其他选择吗?

最佳答案

init() 方法上使用@PostConstruct - 一旦对象位于 spring 上下文中,它就会被 spring 调用,这意味着所有依赖项将被注入(inject)。

关于java - 如何从构造函数访问@Value注释变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7252742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com