背景:

工具类一般都是静态方法,静态方法只能访问静态属性。所以,我们需要静态注入类或者属性。

坑:

如果你使用这样的注入方式的话,都是null,注入不进去。

@Autowired
private static TestService testService;
@Resource
private static TestService testService;
@Value("${key}")
private static String key;

解决办法

(1)@PostConstruct方式实现

@Component
public class TestUtil {@Autowired    private static TestService testService;private static TestUtil testUtils;@PostConstruct      public void init() {          testUtils =this;          testUtils.testService =this.testService;      }
}

@PostConstruct 注解的方法在加载类的构造函数之后执行,也就是在加载了构造函数之后,执行init方法;(@PreDestroy 注解定义容器销毁之前的所做的操作)这种方式和在xml中配置 init-method和 destory-method方法差不多,定义spring 容器在初始化bean 和容器销毁之前的所做的操作;

(2)set方法注入实现

@Component
public class TestUtil {private static TestService testService;private static String key;@Value("{key}")public void setTestService(String key) {          TestUtil.key = key;      }  @Autowiredpublic void setTestService(TestService testService) {          TestUtil.testService =this.testService;      }
}

(3)MethodInvokingFactoryBean

通过MethodInvokingFactoryBean工厂Bean,可以将指定方法返回值注入成为目标Bean的属性值,MethodInvokingFactoryBean用来获得指定方法的返回值,该方法可以是静态方法 也可以是实例方法。 获得的方法返回值既可以被注入到指定Bean实例的指定属性,也可以直接定义成Bean实例。
Java实体类中是这样的

private static String decryptToken;public static void setDecryptToken(String decryptToken) {DecryptUtil.decryptToken = decryptToken;}

xml中是这样的

    <bean id="configIdStatic" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"><property name="staticMethod" value="com.....setDecryptToken"/><property name="arguments" value="${decryptToken}"/></bean>

如果arguments 是多个,采用 List 赋值。

    <bean id="configIdStatic" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"><property name="staticMethod" value="com....setDecryptToken"/><property name="arguments"><list><value>decryptToken</value></list></property></bean>

参考:
https://segmentfault.com/a/1190000019844427?utm_source=tag-newest
https://www.sojson.com/blog/157.html
https://www.cxyzjd.com/article/weixin_42608550/97675350

spring注入static属性相关推荐

  1. Spring 注入static属性值

    Spring 注入static属性值 本文介绍Spring中如何从属性文件给static字段注入值.实际应用中一些工具类中static属性值需读取配置文件,实现该功能可以让工具类提供静态方法更易使用. ...

  2. @Autowired注解能用在static属性吗?autowired注入static属性上为null

    @Autowired注解能用在static属性吗? 答案是否定的,我们来测试下: 日志信息已经很明确了,表示static不能被@Autowired进行复制.为什么呢?我们现在就来一起了解其原因. 首先 ...

  3. quartz的job类无法保留本身通过spring注入的属性问题

    现在有一个应用需要定时做一些动作,使用的是quartz+spring,但是没有使用spring实现的quartz,这里发现了一个问题,就是通过spring注入进来的bean用于做为quartz的job ...

  4. [Spring] 注入Bean属性

    通常,JavaBean的属性是私有的,同时拥有一组存取器方法,setXXX()和getXXX()形式存在.Spring可以借助属性的set方法来配置属性的值,以实现setter方式的注入. Kenny ...

  5. 不能执行autowired_想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做...

    生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...

  6. Spring注入日期到bean属性-CustomDateEditor

    这一个Spring例子向您展示如何为bean属性注入一个"日期". package com.yiibai.common;import java.util.Date;public c ...

  7. 这篇文章,我们来谈一谈Spring中的属性注入

    本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...

  8. Spring注入属性为null

    问题描述 下面这个bean在创建对象后pageNum和pageSize都有值,但是在Spring注入后的值是null public class QuestionDTO implements Seria ...

  9. static属性能用@Autowired注入吗?

    本文内容: 1.起因 2.static 3.@Autowired 4.解决方案 先说结论:不能. ||  起因 从某系统交接过来一部分功能的代码,其中包含了一个工具类,该工具类中用到了一个Compon ...

最新文章

  1. 17 博客后台富文本编辑
  2. 阿里淘系程序员“开源”内部年度技术总结,还把P9大佬喊出来教你“打怪升级”...
  3. ajax传html调用样式的问题
  4. 计算机本科重邮调剂重庆其他二本,重庆多少分能上二本大学,重庆二本大学最低分数线...
  5. matlab利用作图法求圆周率
  6. 围猎“下沉市场”,争抢「小镇青年」,尚美如何突围?
  7. ubuntu 设置大小写切换隐藏_VirtualBox中ubuntu的LAMP项目(温度采集)
  8. java中map转为json数据_Java技术-将java中Map类型数据转化为json数据并以Ajax形式返回...
  9. 初一模拟赛总结(2019.3.9)
  10. Oracle SQL中的!=与
  11. MySQL数据库的基本操作命令
  12. 在osx 10.10.3 下安装git总结
  13. killall pkill kill
  14. Java小题,通过JNI调用本地C++共享库中的对应方法实现杨辉三角的绘制
  15. eplan好看的电缆图表_EPLAN电缆图表模板
  16. java计算机毕业设计家教管理系统源码+mysql数据库+系统+lw文档+部署
  17. scanf指定分隔符号
  18. 【哈佛幸福课笔记】【1】
  19. 计算机毕业设计Java高原特色农产品网站设计(源码+系统+mysql数据库+Lw文档)
  20. 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置

热门文章

  1. Expression 类
  2. 【雕爷学编程】Arduino动手做(133)---LCD1602扩展板模块
  3. 数据挖掘 (1) 基础篇
  4. js中splice和slice方法的用法和区别
  5. 减少USB 1.1 2.0 端口驱动程序延时_毫州USB水杯,创意氢水壶批发
  6. mybatis 动态sql语句拼接
  7. 杜永光分享微信营销如何涨粉丝
  8. python字符串转日期函数
  9. 从零开始学定位 --- kaist数据集体验
  10. C# 使用WebRequest发送post和get请求