我有类似的问题,但却是Spring的新手。我试图将属性加载到@Service中,并尝试使用@Value来检索属性值...
@Autowired
public @Value("#{myProperties['myValue']}") String myValue;
我花了一整天的时间尝试各种注释组合,但它总是返回 null。最后,答案一如既往地在事后显而易见。
1)确保Spring正在扫描你的类以查找注释,方法是在你的servlet中包含包层次结构.xml(它将扫描你插入的基值以下的所有内容。
2)确保你没有“新”你刚刚告诉Spring要看的课程。相反,您可以在@Controller类中使用@Autowire。
Spring中的所有内容都是单例,并且发生的事情是Spring将值加载到其Singleton中,然后我“new”了该类的另一个实例,该实例不包含新加载的值,因此它始终为空。
相反,在@Controller使用...
@Autowired
private MyService service;
调试。。。我发现这一点的一件事是按如下方式扩展我的服务...
@Service
public class MyService implements InitializingBean
然后放入调试语句...
@Override
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
LOGGER.debug("property myValue:" + myValue);
}
在这里,我可以看到初始化时设置的值,后来当我在方法中打印它时,它是null,所以这对我来说是一个很好的线索,它不是同一个实例。
此错误的另一个线索是Tomcat抱怨超时试图从无法解析HTTPheader的套接字中读取...这是因为Spring创建了一个服务的实例,我也创建了一个实例,所以我的一个正在做真正的工作,而Spring正在超时。