我们知道,正常情况下,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。
如对本文有疑问, 点击进行留言回复!!
荐 嵌入式linux开发环境搭建(Docker版,基于iTop 4412开发板)
SpringBoot项目部署到服务器之 Liunx环境安装jdk详细步骤
网友评论