Spring注入空指针问题

    最近建项目时,在使用bean的时候无意中使用了static关键字修饰注入的bean:

@Autowired
private static ClassName fieldName;
必须马上纠正一下,常使用的bean的正确注入方法:
@Autowired
private ClassName fieldName;

    查找了各种原因都解决不了,最后注视着代码,突然发现了这里的bug;先不管为何会犯这种错误,来分析一下为什么组件不能使用static修饰符修饰:
    从Spring的设计理念上出发解释:静态变量/类变量不是对象的属性,而是一个类的属性,spring是基于对象层面上的依赖注入.
    从Spring的原理上来看,Spring 依赖注入是依赖set方法,set方法是普通的对象方法,不是类的方法。
    但是在我们的使用中,会遇到在工具类的一些静态方法中使用组件的情况,这种情况需要我们定义组件必须是静态变量,这种情况下怎么注入呢?
    其实使用另外两种属性注入的方式都是可行的:

通过set方法注入
private static ClassName name;
 @Autowired(required = true)
public void setName(ClassName name){
	this.name=name;
}
通过在XML配置文件中使用

  

另外一些常见的注入空指针问题解决思路:
1、使用的bean的名称是否与声明bean的名称一致,Java方式配置中的@Bean和@Component,@service等注解的名称属性是否与使用时的名称匹配;xml风格配置中的标签的ID属性是否匹配;
2、xml配置风格中是否使用了 context:annotation-config,该标签的作用是向Spring容器中注入@Autowired,@Value,@PostConstruct等注解相对应的bean,以使得这些注解可以被正常使用;
3、如果是Java风格与XML配置风格并用的情况,是否使用了context:component-scan标签,用于向Spring容器注册@service@component等bean注解修饰的组件;

你可能感兴趣的:(java,web)