問題の背景
yml構成ファイルからパラメーターを読み取り、構成エンティティクラスを記述し、GETメソッドとSETメソッドを追加し、@ Autowiredがこの構成クラスを他のクラスに挿入するときにnullポインターを報告する必要があります。
問題の1つを引き起こします
1.時間指定タスクで他のクラスを呼び出すことはできません。2。クラスを新規作成することはできません。
次に、時限タスクが新しいプロセスを開始し、スプリング値が初期クラスに注入されるため、値を注入しますが、この値のクラスは使用されませんが、値のないクラスが呼び出されます。
問題の2つを引き起こします
人間の言葉を翻訳するGoogleのすばらしい回答は次のとおりです。初期化シーケンス
メンバー変数の初期化->コンストラクター-> @ Autowired
getを呼び出すとき、それはまだautowiredのライフサイクルに入っておらず、自然に空であり、値を取得できず、nullポインターエラーが報告されます。
解決
ツールを紹介する
/**
* @author [email protected]
* 此工具类用于从Spring的上下文中去获取到类,解决@autowird注入空指针的问题
* @version 1.0
* @date 2020/10/27 16:54
*/
@Component
public class ApplicationContextHelperUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext( ApplicationContext applicationContext1 ) throws BeansException {
applicationContext = applicationContext1;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
return (T) applicationContext.getBean(clazz);
}
}
同時に、メソッドはによって呼び出されます
@Autowired
HeartbeatConfig heartbeatConfig;
に
private static HeartbeatConfig heartbeatConfig =(HeartbeatConfig) ApplicationContextHelperUtil.getBean(HeartbeatConfig.class);