在用多线程的时候,里面要用到Spring注入服务层,或者是逻辑层的时候,一般是注入不进去的。具体原因应该是线程启动时没有用到Spring实例池。所以注入的变量值都为null。
如果在run方法里面加载application.xml,来取得bean时,由于重复加载,一般情况下会耗尽内存,抛出内存溢出错误。所以这的确是一个很头痛的问题。
有一个方法可以解决注不进去的问题。就是在声明变量的时候,前面加static。这样在初始化的时候它就会加载application.xml,得到bean。
关于这个问题的根本机制没有作深入的研究,好在问题解决了。
从这个例子体会到林信良说过的,没有一个技术是完美的,不要为了Spring而Spring。不要为了注入而注入。
http://hi.baidu.com/adrianbutler/blog/item/2e8109f080acec63dcc47441.html
像下面这样,问题就解决了。
private static CustomerchangeService customerchangeService;
public CustomerchangeService getCustomerchangeService() {
return customerchangeService;
}
public void setCustomerchangeService(
CustomerchangeService customerchangeService) {
CustomerchangeThread.customerchangeService = customerchangeService;
}