@Component//这里必须有注入才能进来,换成@Service也不好使,我想在应用启动的时候初始化一些东西
public class ExceptionCode {
public static Map<String, String> map = null;
// public ExceptionCode(){}
@Autowired//这里不知道为什么为null
private ICmpDao cmpDao;
/**
* 初始化异常编号
*/
public ExceptionCode(){
if(cmpDao == null)
throw new RuntimeException(" cmpOutDao is null");
List<CmpException> list =
cmpDao.searchExceptionCodeList();
if(list == null || list.size() <= 0)
throw new RuntimeException(""
+ " cmp exception code table not data ");
map = new HashMap<String, String>();
for (CmpException ec : list)
map.put(ec.getCode(),ec.getTmCode());
}
}
之前在struts2框架下是这么写的好使,但现在代码需要移动到Spring不知道怎么写了,或者我应该怎么改?
public class ExceptionCode {
public static Map<String, String> map = null;
public ExceptionCode(){}
/**
* 初始化异常编号
*/
public ExceptionCode(ICmpDao cmpDao){
if(cmpDao == null)
throw new RuntimeException(" cmpOutDao is null");
List<CmpException> list =
cmpDao.searchExceptionCodeList();
if(list == null || list.size() <= 0)
throw new RuntimeException(""
+ " cmp exception code table not data ");
map = new HashMap<String, String>();
for (CmpException ec : list)
map.put(ec.getCode(),ec.getTmCode());
}
}
cmpDao
为null
只有一个原因, 那就是你所使用的ExceptionCode
对象没有被IoC
容器所管理.你使用的对象是自己
new
出来的, 而不由spring
创建的, 当然没有办法使用DI
依赖注入.反之如果你的
ExceptionCode
对象由IoC
容器管理, 但是容器中如果不存在cmpDao
那在spring
初始化的时候你将会得到NoSuchBeanDefinitionException
异常.PS:
@Autowired(required = false)
如果你的注解有手动标识该对象可能不存在, 此时spring
在未找到对象时才可能注入null