工具类中静态方法调用@Autowired注入的其他工具类为null_静态方法里调用注入的类为null_mameng1998的博客-程序员秘密

技术标签: java  

问题描述:如果工具类中静态方法要调用一个类的方法,那么该静态方法要求这个类必须是静态(static)的,用@Autowired注入这个类,你会发现这个类一直为null。

先上解决方案的代码:

@Component    //此处注解不能省却(0)
public class UserUtil {
	/*
	 * 要使用的工具类需要spring注入(1)
	 */
	@Autowired
	RedisStringsUtil<String,LoginUser> redisStringsUtil;
	private static UserUtil userUtil;
	/*
	 * 注意此处注解(2)
	 */
    @PostConstruct
	public void init(){
		userUtil = this;
		redisStringsUtil = this.redisStringsUtil;
	}
    /*
     * 主要使用场景(3)
     */
	public static void delTokenByUser(Set set,String userToken){
		if (set != null || !set.isEmpty()){
			Iterator iterator = set.iterator();
			while(iterator.hasNext()){
				String tokenStr = iterator.next().toString();
				String useridToken = tokenStr.split(",")[0].split(":")[1];
				if(useridToken == userToken ||
						useridToken.equals(userToken)
						){
					/*
					 * 注意此处的调用方法(4)
					 */
					userUtil.redisStringsUtil.del(tokenStr);//剔除上一个登录的用户
				}
			}
		}
	}

}

解决方案的解析:

(0)处作用是将(2)userUtil = this;this进行赋值(注:如果无注解userUtil 将null)
(1)处为spring自动注入,使用spring框架的很常用,但是如果在静态方法中调用此注入类的方法,发
现注入为'null';原因不是spring未注入,而是被static方法给'清空'了,在无法先于static方法初始化
之前想了一个办法
(2)处为想到的办法:通过(注:@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且
只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法
在destroy()方法执行执行之后执行)的方法public void init()先给该类赋值,然后通过(1)出注入进
来。
(3)处要处理的特殊方法static(经典是 main()方法,自己想想基础,它里面可以使用的方法调用的
模式)
(4)处是使用这样模式的调用方式redisStringsUtil现在是作为userUtil的属性
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mameng1988/article/details/86013256

智能推荐

jenkins重启 linux_jenkins在Linux 下安装部署_weixin_39788572的博客-程序员秘密

这里介绍两种方法,一种方法将最新版jenkins加入到yum源,另外一种是下载指定版本的rpm包系统centos6自带jdk1.7一 安装jenkinswget -O :下载并以不同的文件名保存yum的repo中默认没有Jenkins,需要先将Jenkins存储库添加到yum repos,执行下面的命令:wget -O /etc/yum.repos.d/jenkins.repo https://p...

Sql养成一个好习惯是一笔财富_192517什么意思_厦门德仔的博客-程序员秘密

我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我么还能保证下一段时间系统还能流畅的运行吗?那么还能保证下一个人能看懂我么的存储过程吗?那么我结合公司平时的培训和平时个人工作经验和大家分享一下,希望对大家有帮助。要知道sql语句,我想我们有必要知道sqlserver查询分析器怎么执行我么sql

Python学习之路--正则表达式_weixin_30873847的博客-程序员秘密

字符组:[字符组]在同一位置肯出现的各种字符组成了一个字符组,在正则表达式中用[]表示.匹配除换行符之外的任意字符\w 匹配字符或数字或下划线\s 匹配任意的空白符\d 匹配数字\W匹配非字符或数字或下划线\S匹配非任意的空白符\D匹配非任意的空白符\n 匹配一个换行符\t 匹配一个制表符\b 匹配一个单词的结尾^匹配字符串的开始$ 匹配字...

【华为OD机试真题 JAVA】欢乐的周末_若博豆的博客-程序员秘密

标题:欢乐的周末| 小华和小为是很要好的朋友,他们约定周末一起吃饭。通过手机交流,他们在地图上选择了多个聚餐地点(由于自然地形等原因,部分聚餐地点不可达),求小华和小为都能到达的聚餐地点有多少个?输入描述:第一行输入m和n,m代表地图的长度,n代表地图的宽度。第二行开始具体输入地图信息,地图信息包含:0 为通畅的道路1 为障碍物(且仅1为障碍物)2 为小华或者小为,地图中必定有且仅有2个 (非障碍物)...

世界坐标系、相机坐标系、图像坐标系、像素坐标系-程序员秘密

四个坐标系都是什么?图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系 构建世界坐标系只是为了更好的描述相机的位置在哪里,在双目视觉中一般将世界坐标系原点定在左相机或者右相机或者二者X轴方向的中点。接下来的重点,就是关于这几个坐标系的转换。也就是说,一个现实中的物体是如何在图像中成像的。四个坐标系之间的相互转换1. 从世界坐标系到相机坐标系 其中[ x ′ , y ′ ] 为...

在Linux下制作Linux&windows启动盘_「已注销」的博客-程序员秘密

在Linux下制作Linux&amp;windows启动盘如何在Linux-mint环境下,制作其他Linux发行版的UEFI启动盘,以及Windows10的UEFI模式启动盘。对于U盘的操作,可以使用命令行的方式,比如sudo fdisk /dev/sdc这样的命令,对于U盘进行设置;为了直观,也可以使用Gparted这个工具,Ubuntu已自带,其他Debian系安装方式:su...

随便推点

svn在checkout或commit时报错的常见解决办法_svn checkout 失败_咖啡那么浓的博客-程序员秘密

在使用svn进行checkout或commit时报错,类似的报错信息如下根据提示,我们首先可以选择使用svn菜单中的“clean up”选项尝试解决此问题如果clean之后发现问题依然存在,我们可以把本地仓库的报错文件先备份到其他目录,然后删除本地仓库的报错文件,从远端仓库重新拉取,然后对比我们备份的文件进行相关的修改操作,即可重新commit...

Invalid character in identifier1_qq_32790593的博客-程序员秘密

版权声明:本文为博主原创文章,未经博主允许不得转载,如有问题请咨询QQ。 https://blog.csdn.net/Jemila/article/details/77867914 &amp;lt;/div&amp;gt; &amp;lt;link rel=&quot;styl...

第32项:谨慎地结合泛型和可变参数(Combine generics and varargs judiciously)_possible heap pollution from parameterized vararg _coloured_glaze的博客-程序员秘密

  可变参数方法(第53项)和泛型都在Java 5时添加到了平台中,所以你可能会期望它们会优雅地相互作用;可悲的是,它们不能相互作用。可变的目的是允许客户端将数量可变的参数传递给方法,但它是一个漏洞抽象( leaky abstraction):当你调用可变参数方法时,会创建一个数组来保存可变参数;该数组应该是一个实现细节,是可见的。因此,当可变参数具有泛型或者参数化类型时,会出现令人困惑的编译器警...

LaTex论文排版 | (15) LaTex中的参考文献BibLaTex_bbx文件_CoreJT的博客-程序员秘密

首先我们需要打开TexStdio,设置默认的Bibliography工具为Biber:然后在.tex当前目录下,创建一个.bib文件:在谷歌学术或百度学术中搜索论文中引用的文献,查看引用:点击Bibtex,复制Bibtex内容到.bib文件中:其余文献也是类似的操作,最后在.bib文件中就包含了,所有我们要引用的文献的Bibtex:(注意:最后参考文献的...

stm32 java_STM32F429DISCovery运行java_逆行斋的博客-程序员秘密

STM32F429DISCovery运行java最近在研究Java虚拟机移植到单片机上,今天已经初步完成。接下来整理下代码,准备过些日子与大家见面!硬件环境:STM32F429DISCovery开发工具:em::Blocks(Code::Blocks衍生版本) + arm-none-eabi-gcc+ IntelliJ IDEA + jdk系统环境:圆景V1.7.8, 已经集成Java虚拟机一、编...

spark_sql编写常见异常_光圈1001的博客-程序员秘密

1.错误:找不到主类或者无法加载主类: 分析:没有语法错误,已经引入了依赖包,应该是ides配置问题 解决办法:关联scala的SDK 解决—- 2.错误:在创建scala之后,配置spark_sql时,在pom引入了spark-sql包,但是没有引入spark-core包,无法创建Spark-Conf Spark-Context,不能导入相应的包 原因:部分idea可能父项目或者sp...