2017-11-08 6 views
-2

설정하는 것이 좋습니다. @Autowired 봄 필드는 DI 프로펠러 전용입니까?Spring의 @Autowired 필드를 private으로 설정하는 것이 좋은 습관입니까?

아무도 클래스 외부에서 직접이 필드에 액세스하려고하기 때문에 나는 그렇게해야한다고 생각합니다.

그러나 다른 한편으로, Spring은 이들을 액세스해야합니다. 나는 그것이 사적 일 때도 그렇게 할 수 있다는 것을 알고 있지만, 문제를 일으킬 수 있습니까? 예를 들어 성능 문제가 있습니까? (이 경우 Spring이 Reflection을 사용하면 작은 성능 저하가 발생할 수 있음을 잘 이해할 수 있습니다.) 아니면 이것은 중요하지 않습니까?

나는이 질문에 대한 답변을 검색하기위한 검색을위한 자습서를 읽었지만 어떤 "좋은"답변도 찾지 못했습니다.

이 입력란의 액세스 수정 자로 가장 적합한 것은 무엇입니까? 이 점을 이해하거나 답변을 찾기 시작할 수있는 리소스를 알려 주시면 도와 줄 수 있습니까?

+0

그것은 당신이 응용 프로그램에 대한 필드의 가시성에 따라 달라집니다. '@ Autowired '라고 주석을 달아도 상관 없습니다. – Jens

+1

"가장 좋은 방법은 생성자 삽입을 통해 autowiring을 사용하는 것입니다. 그러나 가장 좋은 것은 정말로 독설적입니다. 스프링 문서에서 지시하는대로 간단하게 처리 할 수 ​​있습니다. https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-spring-beans-and-dependency-injection.html – Gimby

+0

DI가 발생하는 개인 필드를 사용하면 성능이 저하되지 않습니다. 드랍스 또는 다른 문제? – SiGe

답변

0

당신이 autowired 개체로 표시 할 때 개체 값을 처리 할 컨테이너를 말하면 컨테이너를 통해 공개적으로 액세스 할 수 있도록 설정하면됩니다. 따라서 public과 singleton으로 이미 정의되어 있습니다. 즉, 클래스 외부에서 액세스 할 수 없도록 참조를 private로 설정할 수 있지만 해당 값은 컨테이너를 통해 액세스 할 수 있습니다. 이러한 변수를 개인용으로 설정하려면이 옵션을 사용하면 해를 입지는 않지만 분명히 그것이 사용자의 필요에 따라 달라 지므로 이는 법률이 아닙니다. 공연을보고 있다면 사적인 사람이나 대중이 아무 것도 바꿀 수 없다는 것을 명심하십시오. 올바른 범위 (싱글 톤, 프로토 타입 ...)를 선택하십시오. 이것이 도움이 될 것입니다. 당신은 더 많은 정보는이 질문을 읽어해야하는 경우 :

How does @autowired annotation works for a private field?

How does Spring @Autowired work

why @autowired in spring does not need setter method for private instance variable?