我有Spring管理的应用程序,并尝试从数组访问注入的资源:
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Collection;
@Service("serviceA")
class A {
@Resource
private HeaderLevelValidator defaultHeaderLevelValidator;
@Resource
private HeaderLevelValidator headerLevelValidator;
/** Validators specific for Storefront. */
private final Collection<HeaderLevelValidator> HEADER_BEAN_NAMES = Arrays.asList(defaultHeaderLevelValidator,
headerLevelValidator);
public Collection<HeaderLevelValidator> getHeaderValidators()
{
return HEADER_BEAN_NAMES;
}
}
我尝试使用 getHeaderValidators()在运行时访问我的列表,但获得了空值列表 {null,null} 。为什么?定义注入资源列表的正确方法是什么?
提前致谢!
答案 0 :(得分:1)
问题是在注入bean之前正在初始化HEADER_BEAN_NAMES
。在对象实例化和初始化之后发生字段注入。尝试将初始化移动到使用@PostConstruct
注释的方法,或者如果要保留HEADER_BEAN_NAMES
final,请改用构造函数注入。
答案 1 :(得分:0)
初始化后期建设。
private Collection<HeaderLevelValidator> HEADER_BEAN_NAMES;
@PostConstruct
public void init()
{
HEADER_BEAN_NAMES = Arrays.asList(defaultHeaderLevelValidator,
headerLevelValidator);
}
在Spring构造托管bean之后,将调用init()方法。请注意,HEADER_BEAN_NAMES不能是最终的,因为它在构造后初始化。