이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 25865|회답: 0

[출처] Spring Boot는 설정 파일의 값을 읽습니다(application.yml)

[링크 복사]
게시됨 2019. 1. 7. 오후 3:37:14 | | | |
첫 번째 application.yml 구성 프로필은 다음과 같습니다:



Maven 프로젝트pom.xml 패키지 추가:




다음 코드로 새로운 매핑된 객체를 생성하세요:

문자열 타입은 속성 값을 받기 위해 세터가 필요하며; 맵, 컬렉션, 배열은 필수가 아닙니다

@Autowired 주석을 사용해 아래 이미지에서 보듯이 자동으로 주입하세요:



esConfig는 항상 null을 출력합니다. 오랫동안 해답을 찾으려 했지만 실패했으니, 아래에 해결책이 있습니다.

새 컨트롤러를 만들자, 코드는 다음과 같다:

주입이 성공하면 yml 구성 파일의 값은 다음과 같이 정상적으로 얻어집니다:



EsClient가 성공적으로 주입되지 못하는 이유는 다음과 같습니다:

이 클래스의 함수를 구성자에서 호출하면, 이 클래스의 @Autowired 변수가 이 함수에 사용됩니다.

그래서 잘못될 수도 있다고 생각했죠. @Autowired 클래스가 구성될 때까지 기다려야 외부 참조에서 집합할 수 있기 때문입니다. 따라서 @Autowired의 주입 시간은 생성자의 실행 시간보다 늦어야 합니다.
용액:

Spring Team은 "원두에는 항상 구성 기반 의존성 주입을 사용하세요. 필수 의존성에는 항상 어설션을 사용하세요.

번역:

스프링은 "항상 콩에 구성체와 의존성 주입을 확립하라. 항상 의존성을 강제하기 위해 주장을 사용하라"고 말했습니다.


원문 작성:

수정된 글쓰기:



추신: Java 변수의 초기화 순서는 정적 변수 또는 정적 문장 블록 – > 인스턴스 변수 또는 초기화 문 블록 – > 구성 방법 – >@Autowired

그렇다면 왜 최종 타입을 멤버 변수에 추가할까요?

인터넷에는 다음과 같은 설명이 있습니다: 스프링 구성에서 기본 빈의 범위는 싱글톤이며, 이는 시작 후 항상 존재합니다. 빈의 객체를 동적으로 생성한다고 선언하여 scope 속성을 프로토타입으로 설정하세요. 하지만 서비스 자체가 싱글턴이라면, 인젝션은 한 번만 실행됩니다.

@Autowired 자체는 싱글턴 모드이며, 프로그램이 시작될 때 한 번만 실행되며, 최종 모드가 정의되지 않더라도 두 번째로 초기화되지 않으므로 이 최종 모드는 의미가 없습니다.

프로그램이 실행 중일 때 생성자가 다시 실행되는 것을 방지하기 위해서일 수도 있고;

아니면 이해하기 더 쉽고, 프로그램이 시작될 때 최종 설정이 한 번만 초기화되는 걸 수도 있겠죠.






이전의:Spring Boot+maven으로 프로젝트를 빠르게 구축할 수 있습니다
다음:2018년 중국 인터넷 기념품 공개
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com