大家好,我是程序猿小马,沪漂一族!
写文章就是对于平时的总结以及大家共同学习进步,早日码出各自的梦想😊
坐标:
世博大道南门涮肉
1、问题起因
在我们日常开发中,有的时候需要封装一个工具类,确保逻辑代码看上去没有这么复杂,让结构扁平化。但是工具类中的方法大多是静态的方法,而静态方法只能调用静态成员变量。静态变量并不属于对象的属性,而是属于类的属性,而Spring则是基于对象的属性进行依赖注入的。所以用注解注入静态变量是不可行的,会一直报NullPointerException
@Autowired
private static PreconditionUtilMapper preconditionUtilMapper;
2、解决方式
2.1 方式一:使用@PostConstruct注解
@Component
@Slf4j
public class PreconditionUtil {
@Autowired
private PreconditionUtilMapper preconditionUtilMapper1;
private static PreconditionUtilMapper preconditionUtilMapper;
@PostConstruct
void PreconditionUtil(){
this.preconditionUtilMapper = preconditionUtilMapper1;
}
}
@PostConstruct注解好多人以为是Spring提供的。其实是Java自己的注解。
Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)
2.2 方式一:在set方法上注入
@Component
@Slf4j
public class PreconditionUtil {
private static PreconditionUtilMapper preconditionUtilMapper;
@Autowired
private void setPreconditionUtilMapper(PreconditionUtilMapper preconditionUtilMapper1){
this.preconditionUtilMapper = preconditionUtilMapper1;
}
}
注:
两个方式类上都要添加@Component注解
每日小结
- 这是小马在前些天写一个工具类遇到的一个问题,觉得值得跟大家一起分享。
以上就是小马今天要发的内容,欢迎大家互相学习,共同进步,也可以在评论区互动哦!👇