spring为类的静态属性实现注入
程序员文章站
2022-08-11 15:19:09
当一个java类里的静态方法需要引用一个spring资源时,我们需要定义静态属性,然后通过显示声明它们的set方法(注意,这个set方法是非静态的哦),来实现静态属性的注入。 ......
我们知道,正常情况下,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。
上一篇: nginx如何实现负载均衡以及实现方式
下一篇: Hystrix【参数配置及缓存】
推荐阅读
-
Spring boot工具类静态属性注入及多环境配置详解
-
@Autowired 和 @Resource注解, 一个接口有多个实现类的时候Spring注入遇到的问题
-
spring为类的静态属性实现注入
-
Java 五种方法实现普通类注入spring管理的service、repository等资源
-
@Autowired 和 @Resource注解, 一个接口有多个实现类的时候Spring注入遇到的问题
-
spring为类的静态属性实现注入
-
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法_javascript技巧
-
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法_javascript技巧