spring為類的靜態屬性實現注入例項方法
阿新 • • 發佈:2020-01-07
我們知道,正常情況下,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); } ... } }
以上就是本次知識點的全部相關程式碼,感謝大家的學習和對我們的支援。