@Autowired注解和静态方法 NoClassDefFoundError could not initialize class 静态类
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 静态类相关推荐
- Spring框架你敢写精通,面试官就敢问@Autowired注解的实现原理
面试官:Spring框架中的@Autowired注解可以标注在哪些地方? 小小白:@Autowired注解可以被标注在构造函数.属性.setter方法或配置方法上,用于实现依赖自动注入. 面试官:有没 ...
- 深入理解@Autowired注解
本文来说下@Autowired注解,这个注解在平时的开发中也是使用的比较多,但是很多人可能也就是仅仅会使用而已,本文来说下其实现原理. 文章目录 @Autowired注解概述 @Autowired注解 ...
- Spring中Autowired注解到底怎么实现的
前言 使用Spring开发时,进行配置主要有两种方式,一是XML的方式,二是Java Config的方式. Spring技术自身也在不断的发展和改变,从当前springboot的火热程度来看,java ...
- @Autowired注解的实现原理
@Autowired注解用法 在分析这个注解的实现原理之前,我们不妨先来回顾一下@Autowired注解的用法. 将@Autowired注解应用于构造函数,如以下示例所示 public class M ...
- Spring中@Autowired注解、@Resource注解的区别
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...
- @autowired注解_品Spring:对@Autowired和@Value注解的处理方法(文末附spring系列资源合集)...
作者:编程新说李新杰 出自:微信公众号"编程新说" 原文:品Spring:对@Autowired和@Value注解的处理方法 在Spring中能够完成依赖注入的注解有JavaSE提 ...
- Spring5:@Autowired注解、@Resource注解和@Service注解
转载:http://www.cnblogs.com/xrq730/p/5313412.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有 ...
- 解决非controller使用@Autowired注解注入报错为java.lang.NullPointerException问题
解决非controller使用@Autowired注解注入报错为java.lang.NullPointerException问题 参考文章: (1)解决非controller使用@Autowired注 ...
- Spring学习(8)--- @Autowired注解(一)
可以将@Autowired注解为"传统"的setter方法 package com.mypackage;import org.springframework.beans.facto ...
最新文章
- 使用Word2010灵活掌握文档结构
- 弱网测试用什么农_弱网测试(一)
- Oracle sql语句执行过程图文分析
- Net基础篇_学习笔记_第十二天_面向对象继承(字符串_字符串的不可变性)
- 汇聚技术与能力,共绘区块链远大蓝图!
- 微型计算机控制技术试卷B,微型计算机控制技术试卷b..doc
- 对二进制文件的操作(c++ 程序设计 by 谭浩强 课本实例)
- netbeans html 格式化,在NetBeans中更改模板或HTML缩进
- 09年全年的case处理总量
- jQuery中浏览器版本判断的一个BUG,此BUG已影响到jqModal,thickbox等多个jQuery插件的应用...
- JAVAFX的table样式修改
- layui重置按钮函数,支持文件
- linux指定行添加内容,Linux sed命令在指定行前后添加内容
- 关于Gary Marcus与Yann LeCun讨论AI现状及发展
- Java 开发flink流/批处理程序
- 游戏核心玩法中,设计个体模块差异与平衡的思路
- Unity UGUI Inputfield 回车submit 按下Enter回车完成
- BBQ EasyBuns
- arduino学习笔记十四--Arduino 环境光线传感器实验
- 中国互联网流行文化缔造者百度贴吧,如何拥抱新时代?
热门文章
- python输入年份月份输出天数_6.2(输入年份 月份 输出该月天数)
- display属性_CSS之使用display:inline-block来布局
- L1-045 宇宙无敌大招呼
- 你应该关注的几个网站
- [安卓] 9、线程、VIEW、消息实现从TCP服务器获取数据动态加载显示
- SugarCRM 去掉 模块标题左边的 问号 和 帮助
- C语言基础MessageBox(......)用法详解
- Python—实训day4—爬虫案例3:贴吧图片下载
- Swift5 利用元祖 返回多个 类型的函数,取出
- IOS15瀑布流的使用