当前位置: 移动技术网 > IT编程>开发语言>Java > spring为类的静态属性实现注入

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

2019年10月23日  | 移动技术网IT编程  | 我要评论


我们知道,正常情况下,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。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网