spring为类的静态属性实现注入

我们知道,正常情况下,spring的一个bean要依赖其他资源,如properties或其他bean,直接利用@Value或@Autowired就可以了。这两个注解就相当于spring application context xml文件定义bean时的property节点。相当于调用了每个属性的set方法。
<bean id="person" class="com.myapp.core.spel.xml.Person">
<property name="book" value="book" />
<property name="bookName" value="#{book.name}"/>
</bean>

然而,当一个java类里的静态方法需要引用一个spring资源时,我们需要定义静态属性,然后通过显示声明它们的set方法(注意,这个set方法是非静态的哦),来实现静态属性的注入。
见如下示例代码,其中dingdingReceiverMan属性的set方法通过@Value注解来注入一个配置“monitor_log.dingding.receiverMan”;redisUtil属性的set方法通过@Autowired注解来注入一个bean——被@Component修饰的类“RedisUtil”。
@Component
@Slf4j
public class SendWarningMessage { private static String dingdingReceiverMan;
private static RedisUtil redisUtil;
static final String ACC_MONITOR_REDIS_KEY_PREFIX = "ACC_MONITOR_"; @Value("${monitor_log.dingding.receiverMan}")
public void setDingdingReceiverMan(String value) {
dingdingReceiverMan = value;
} @Autowired
public void setRedisUtil(RedisUtil value) {
redisUtil = value;
} public static void sendMsg(String mobile, String msg) { ... String redisKey = ACC_MONITOR_REDIS_KEY_PREFIX + MD5Util.md5(warningMsg);
if (redisUtil.get(redisKey) != null) {
log.info("手机号近期发过,为防止频繁发送,本次不发。 {}", mobile);
} else { log.info("发送的消息:{}", warningMsg);
DingdingUtil.sendDingDing(dingdingReceiverMan, warningMsg);
redisUtil.set(redisKey, warningMsg, 5 * 60); } ... }
}

The End. KEEP IT SIMPLE,STUPID。

spring为类的静态属性实现注入的更多相关文章
- JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- java类的静态属性值获取
获取某个类实例的静态属性: public class ErrorCode { private String code; private String message; private ErrorCod ...
- MobX基础 ----- 类的静态属性和装饰器
当我们使用MobX的时候,首先要声明一个store, 用来保存状态,它的最基本的语法 如下: class Todo { @observable title = ""; @obser ...
- java新手笔记11 类的静态属性、方法(单例)
1.Person类 package com.yfs.javase; public class Person { String name;//每个对象上分配 与对象绑定 int age; char se ...
- python - class类 (二) 静态属性/类方法/静态方法
静态属性: #静态属性 = 数据属性 (@property) class mianji(): def __init__(self,x,y): self.x = x self.y = y #类的函数方法 ...
- python的类的 静态属性 类方法 静态方法
一.静态属性 静态属性说的就是数据属性 1.定义一个房间的类,求下这个房间的面积 class Room: def __init__(self,name,ower,width,length,heigh) ...
- PHP类知识----静态属性和方法
<?php class mycoach { public $name="陈培昌"; CONST hisage =; ; private $favorite = "喜 ...
- java 反射获取类的静态属性值
public class AppTest { private NodeClass nodeClass; public static String hehe = "hehe"; pu ...
- php函数、类和对象以及类的封装、继承、类的静态方法、静态属性
1.函数 php内置函数可以直接使用,如果没有安装php扩展即可 自定义函数 //函数function 函数名 function dump($var = null){ //支出默认参数 ...
随机推荐
- wait notify notifyAll await signal signalAll 的理解及示例
从常见的一道面试题开始,题目的描述是这样子的: 有三个线程分别打印A.B.C,请用多线程编程实现,在屏幕上循环打印10次ABCABC- 网上大都教了你怎么去实现,其实我也写过一篇 https://bl ...
- Xcode 10 Error: Multiple commands produce
目录 Xcode 9.4.1运行react-native 可以,但是在Xcode 10运行报错,报错信息如下: 解决方法 1. 选择 File > Project Settings (或者 Fi ...
- [TimLinux] Python3 Coverity zeep/SOAP 库使用示例
废话不多说,上代码: # 基于Coverity的示例 from zeep import Client from zeep.wsse.username import UsernameToken conf ...
- HYSBZ-2002弹飞绵羊
某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当 ...
- CSS修饰文档
定义字体类型 <html> <head> <meta http-equiv="Content-Type" content="text/htm ...
- Python3 面向对象进阶1
目录 组合 概念 目的 实现方式 封装 概念 目的 实现方式 访问限制 概念 目的 实现方式 property 概念 目的 实现方式 多态 概念 目的 抽象类 概念 目的 实现方法 鸭子类型 组合 概 ...
- JAVA可视化闹钟源码
概述 一些同学的Java课设有这样一个问题,比较感兴趣就做了一下 功能介绍: 1.可增加闹钟 2.可删除闹钟 3.时间到了响铃 4.关闭闹钟不会丢失闹钟(因为闹钟存储在txt文件中,不会因程序关闭就终 ...
- 带你快速了解Java锁中的公平锁与非公平锁
前言 Java语言中有许多原生线程安全的数据结构,比如ArrayBlockingQueue.CopyOnWriteArrayList.LinkedBlockingQueue,它们线程安全的实现方式并非 ...
- JS计算数组的总和
1.最简单的遍历累计 var arr=[1,2,3,4,5,6] var sum =0 for(var i=0;i<arr.length;i++){ sum=sum+arr[i] } 2.利用r ...
- CCF-CSP题解 201812-3 CIDR合并
题目想求与给定前缀列表等价的包含IP前缀数目最少的前缀列表. 首先是怎么存储前缀列表.用一个long long存储IP地址,再存一个前缀长度,封装在一个结构体里\(<ipNum, len> ...