我们知道,静态方法不属于某一个对象,而是类的属性
举个例子
public class MailUtil{
public Service service;
@Value("${name}")
public static String staticName;
public static void method(){
service.modify(name);
}
}
如果我们直接使用MailUtil.method()时,会抛出空指针异常,并且得到的name值是null
因为Spring对于容器的注入是在静态方法之后的,所以在Spring进行bean的注入时,这部分数据会被还原(本身spring是不推荐用静态方法外定义静态属性的)需要在容器启动的时候把这部分再次赋予值
对于服务等bean的注入,需要通过构造函数来实现的
@Autowired
public MailUtils(Service service){
return MailUtils.service = service;
}
对于值的注入(通过set注入)
@Value("${name}")
public void setStaticName(String name){
staticName = name;
}
这样启动项目后就不会取不到服务和值了
网友评论