JAva静的コードブロックとspring@value注記注入実行順序

2785 ワード

java static静的コードブロックは最初に実行され、springになります. 相関注入.静的コードブロックが先にロードされると、プロジェクトの起動がエラーになります.
静的変数をどのように注入し、静的コードで使用しますか?
  • パラメータ構成:アプリケーション.properties
  • sc.crm.upDirPath=
  • 注入:spring bootの任意のコンポーネントが使用できます.ここでは、手動でnewを除去することなく、構成する定数または注入に使用するツールクラスを定義するために一般的に使用される簡単なコンポーネント@Componentを宣言します.
  • @Component
    public class CrmProperties {
    
        @Value("${sc.crm.upDirPath}")
        private String uploadPath;
    
        public String getUploadPath() {
            return uploadPath;
        }
    
        public void setUploadPath(String uploadPath) {
            this.uploadPath = uploadPath;
        }
    
    }
     
  • 使用:直接注入
  • @Service
    public class CustomerServiceImpl implements CustomerService {
    
        @Autowired
        private CrmProperties crmProperties;
    
        //        /      
        @Value("${sc.crm.upDirPath}")
        private String uploadPath;
        
    }
    
  • 静的注入:

  • 4.1.springのコンテキストを取得するツールクラスを実現する
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    /**
     * Spring   ,  Spring      
     */
    @Component
    public class SpringContextUtil implements ApplicationContextAware {
        private static ApplicationContext applicationContext = null;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if(SpringContextUtil.applicationContext == null){
                SpringContextUtil.applicationContext  = applicationContext;
            }
        }
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        public static Object getBean(String name){
            return getApplicationContext().getBean(name);
        }
    
        public static  T getBean(Class clazz){
            return getApplicationContext().getBean(clazz);
        }
    
        public static  T getBean(String name,Class clazz){
            return getApplicationContext().getBean(name, clazz);
        }
    }
    

    4.2静的注入:
    public final class UpDownLoadUtil {
    
        private static String uploadPath ;
        //       ,     
        static{
            CrmProperties crmProperties = SpringContextUtil.getBean(CrmProperties.class);
            uploadPath = crmProperties.getUploadPath();
        }
        
        //        ,              
        private UpDownLoadUtil(){
            throw new AssertionError();
        }
        
        public static void testUtil(){
            systom.out.println(uploadPath);
        }
        
    }
    
    ここまで、この構成定数は静的メソッドで正常に使用できます=============================================================================================================