NoClassDefFoundError could not initialize class 静态类
spring boot 静态类 java.lang.ExceptionInInitializerError
NoClassDefFoundError could not initialize class 静态类
Could not initialize 静态
@Autowired 静态类 null
spring boot 静态属性 配置文件

https://www.cnblogs.com/chenfeng1122/p/6270217.html

一、业务场景

spring框架应用中有些静态方法需要依赖被容器管理的类,就像这样:

@Component
public class Test {@Autowiredprivate static UserService userService;public static void test() {userService.test();}
}

这样一定会报java.lang.NullPointerException: null异常。

二、原理剖析

静态变量、类变量不是对象的属性,而是一个类的属性,所以静态方法是属于类(class)的,普通方法才是属于实体对象(也就是New出来的对象)的,spring注入是在容器中实例化对象,所以不能使用静态方法。

而使用静态变量、类变量扩大了静态方法的使用范围。静态方法在spring是不推荐使用的,依赖注入的主要目的,是让容器去产生一个对象的实例,然后在整个生命周期中使用他们,同时也让testing工作更加容易。

一旦你使用静态方法,就不再需要去产生这个类的实例,这会让testing变得更加困难,同时你也不能为一个给定的类,依靠注入方式去产生多个具有不同的依赖环境的实例,这种static field是隐含共享的,并且是一种global全局状态,spring同样不推荐这样去做。

三、解决方法

1、将@Autowire加到构造方法上

@Component
public class Test {private static UserService userService;@Autowiredpublic Test(UserService userService) {Test.userService = userService;}public static void test() {userService.test();}
}

2、用@PostConstruct注解

@Component
public class Test {private static UserService userService;@Autowiredprivate UserService userService2;@PostConstructpublic void beforeInit() {userService = userService2;}public static void test() {userService.test();}
}

@Autowired注解和静态方法 NoClassDefFoundError could not initialize class 静态类相关推荐

  1. Spring框架你敢写精通,面试官就敢问@Autowired注解的实现原理

    面试官:Spring框架中的@Autowired注解可以标注在哪些地方? 小小白:@Autowired注解可以被标注在构造函数.属性.setter方法或配置方法上,用于实现依赖自动注入. 面试官:有没 ...

  2. 深入理解@Autowired注解

    本文来说下@Autowired注解,这个注解在平时的开发中也是使用的比较多,但是很多人可能也就是仅仅会使用而已,本文来说下其实现原理. 文章目录 @Autowired注解概述 @Autowired注解 ...

  3. Spring中Autowired注解到底怎么实现的

    前言 使用Spring开发时,进行配置主要有两种方式,一是XML的方式,二是Java Config的方式. Spring技术自身也在不断的发展和改变,从当前springboot的火热程度来看,java ...

  4. @Autowired注解的实现原理

    @Autowired注解用法 在分析这个注解的实现原理之前,我们不妨先来回顾一下@Autowired注解的用法. 将@Autowired注解应用于构造函数,如以下示例所示 public class M ...

  5. Spring中@Autowired注解、@Resource注解的区别

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...

  6. @autowired注解_品Spring:对@Autowired和@Value注解的处理方法(文末附spring系列资源合集)...

    作者:编程新说李新杰 出自:微信公众号"编程新说" 原文:品Spring:对@Autowired和@Value注解的处理方法 在Spring中能够完成依赖注入的注解有JavaSE提 ...

  7. Spring5:@Autowired注解、@Resource注解和@Service注解

    转载:http://www.cnblogs.com/xrq730/p/5313412.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有 ...

  8. 解决非controller使用@Autowired注解注入报错为java.lang.NullPointerException问题

    解决非controller使用@Autowired注解注入报错为java.lang.NullPointerException问题 参考文章: (1)解决非controller使用@Autowired注 ...

  9. Spring学习(8)--- @Autowired注解(一)

    可以将@Autowired注解为"传统"的setter方法 package com.mypackage;import org.springframework.beans.facto ...

最新文章

  1. 使用Word2010灵活掌握文档结构
  2. 弱网测试用什么农_弱网测试(一)
  3. Oracle sql语句执行过程图文分析
  4. Net基础篇_学习笔记_第十二天_面向对象继承(字符串_字符串的不可变性)
  5. 汇聚技术与能力,共绘区块链远大蓝图!
  6. 微型计算机控制技术试卷B,微型计算机控制技术试卷b..doc
  7. 对二进制文件的操作(c++ 程序设计 by 谭浩强 课本实例)
  8. netbeans html 格式化,在NetBeans中更改模板或HTML缩进
  9. 09年全年的case处理总量
  10. jQuery中浏览器版本判断的一个BUG,此BUG已影响到jqModal,thickbox等多个jQuery插件的应用...
  11. JAVAFX的table样式修改
  12. layui重置按钮函数,支持文件
  13. linux指定行添加内容,Linux sed命令在指定行前后添加内容
  14. 关于Gary Marcus与Yann LeCun讨论AI现状及发展
  15. Java 开发flink流/批处理程序
  16. 游戏核心玩法中,设计个体模块差异与平衡的思路
  17. Unity UGUI Inputfield 回车submit 按下Enter回车完成
  18. BBQ EasyBuns
  19. arduino学习笔记十四--Arduino 环境光线传感器实验
  20. 中国互联网流行文化缔造者百度贴吧,如何拥抱新时代?

热门文章

  1. python输入年份月份输出天数_6.2(输入年份 月份 输出该月天数)
  2. display属性_CSS之使用display:inline-block来布局
  3. L1-045 宇宙无敌大招呼
  4. 你应该关注的几个网站
  5. [安卓] 9、线程、VIEW、消息实现从TCP服务器获取数据动态加载显示
  6. SugarCRM 去掉 模块标题左边的 问号 和 帮助
  7. C语言基础MessageBox(......)用法详解
  8. Python—实训day4—爬虫案例3:贴吧图片下载
  9. Swift5 利用元祖 返回多个 类型的函数,取出
  10. IOS15瀑布流的使用