JAva静的コードブロックとspring@value注記注入実行順序
2785 ワード
java static静的コードブロックは最初に実行され、springになります. 相関注入.静的コードブロックが先にロードされると、プロジェクトの起動がエラーになります.
静的変数をどのように注入し、静的コードで使用しますか?パラメータ構成:アプリケーション.properties 注入:spring bootの任意のコンポーネントが使用できます.ここでは、手動でnewを除去することなく、構成する定数または注入に使用するツールクラスを定義するために一般的に使用される簡単なコンポーネント@Componentを宣言します. 使用:直接注入 静的注入:
4.1.springのコンテキストを取得するツールクラスを実現する
4.2静的注入:
静的変数をどのように注入し、静的コードで使用しますか?
sc.crm.upDirPath=
@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);
}
}
ここまで、この構成定数は静的メソッドで正常に使用できます=============================================================================================================