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配置文件中使用<property>
<bean value="beanName" class="x.x.x.Util">
  <property value="xxx" ref="xxx"/>
</bean>

另外一些常见的注入空指针问题解决思路:
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注解修饰的组件;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值