spring注入static属性
背景:
工具类一般都是静态方法,静态方法只能访问静态属性。所以,我们需要静态注入类或者属性。
坑:
如果你使用这样的注入方式的话,都是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属性相关推荐
- Spring 注入static属性值
Spring 注入static属性值 本文介绍Spring中如何从属性文件给static字段注入值.实际应用中一些工具类中static属性值需读取配置文件,实现该功能可以让工具类提供静态方法更易使用. ...
- @Autowired注解能用在static属性吗?autowired注入static属性上为null
@Autowired注解能用在static属性吗? 答案是否定的,我们来测试下: 日志信息已经很明确了,表示static不能被@Autowired进行复制.为什么呢?我们现在就来一起了解其原因. 首先 ...
- quartz的job类无法保留本身通过spring注入的属性问题
现在有一个应用需要定时做一些动作,使用的是quartz+spring,但是没有使用spring实现的quartz,这里发现了一个问题,就是通过spring注入进来的bean用于做为quartz的job ...
- [Spring] 注入Bean属性
通常,JavaBean的属性是私有的,同时拥有一组存取器方法,setXXX()和getXXX()形式存在.Spring可以借助属性的set方法来配置属性的值,以实现setter方式的注入. Kenny ...
- 不能执行autowired_想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做...
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- Spring注入日期到bean属性-CustomDateEditor
这一个Spring例子向您展示如何为bean属性注入一个"日期". package com.yiibai.common;import java.util.Date;public c ...
- 这篇文章,我们来谈一谈Spring中的属性注入
本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...
- Spring注入属性为null
问题描述 下面这个bean在创建对象后pageNum和pageSize都有值,但是在Spring注入后的值是null public class QuestionDTO implements Seria ...
- static属性能用@Autowired注入吗?
本文内容: 1.起因 2.static 3.@Autowired 4.解决方案 先说结论:不能. || 起因 从某系统交接过来一部分功能的代码,其中包含了一个工具类,该工具类中用到了一个Compon ...
最新文章
- 17 博客后台富文本编辑
- 阿里淘系程序员“开源”内部年度技术总结,还把P9大佬喊出来教你“打怪升级”...
- ajax传html调用样式的问题
- 计算机本科重邮调剂重庆其他二本,重庆多少分能上二本大学,重庆二本大学最低分数线...
- matlab利用作图法求圆周率
- 围猎“下沉市场”,争抢「小镇青年」,尚美如何突围?
- ubuntu 设置大小写切换隐藏_VirtualBox中ubuntu的LAMP项目(温度采集)
- java中map转为json数据_Java技术-将java中Map类型数据转化为json数据并以Ajax形式返回...
- 初一模拟赛总结(2019.3.9)
- Oracle SQL中的!=与
- MySQL数据库的基本操作命令
- 在osx 10.10.3 下安装git总结
- killall pkill kill
- Java小题,通过JNI调用本地C++共享库中的对应方法实现杨辉三角的绘制
- eplan好看的电缆图表_EPLAN电缆图表模板
- java计算机毕业设计家教管理系统源码+mysql数据库+系统+lw文档+部署
- scanf指定分隔符号
- 【哈佛幸福课笔记】【1】
- 计算机毕业设计Java高原特色农产品网站设计(源码+系统+mysql数据库+Lw文档)
- 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置