[SPRING] @Autowired vs 세터에 필요 @
SPRING@Autowired vs 세터에 필요 @
다음과 같은 코드의 차이점을 알고 싶습니다.
class MyClass {
@Autowired
MyService myService;
}
코드는 다음과 같습니다.
class MyClass {
MyService myService;
@Required
public void setMyService(MyService val) {
this.myService = val;
}
}
해결법
-
==============================
1.@Autowired 어노테이션은 빈을 autowire 할 때 사용됩니다. @Autowired는 세터에만 국한되지 않습니다. 생성자 및 필드와 함께 사용할 수 있습니다. @Autowired 어노테이션을 필드에 사용하면 해당 필드는 일치하는 데이터 유형을 갖는 bean으로 자동으로 호출됩니다.
@Autowired 어노테이션은 빈을 autowire 할 때 사용됩니다. @Autowired는 세터에만 국한되지 않습니다. 생성자 및 필드와 함께 사용할 수 있습니다. @Autowired 어노테이션을 필드에 사용하면 해당 필드는 일치하는 데이터 유형을 갖는 bean으로 자동으로 호출됩니다.
@Required는 특정 속성이 설정되었는지 여부를 확인합니다. 필드에 @Required annotation으로 주석을 달았고 해당 필드가 설정되어 있지 않으면 org.springframework.beans.factory.BeanInitializationException이 발생합니다.
부치다:
봄 @ 자동 사용
Spring의 @ Required annotation의 권장 사용법
편집 : 'kryger'에 의해 지적한대로 : @Autowired 주석이 달린 필드는 실제로 @Required (false로 필요한 매개 변수를 명시 적으로 설정하지 않은 경우)됩니다. 예 :
@Autowired(required=false) private ObjectType objectType;
@Autowired로 주석 된 필드의 경우 일치하는 데이터 유형을 가진 bean을 사용할 수 없으면 org.springframework.beans.factory.BeanCreationException이 발생합니다.
-
==============================
2.@Autowired는 @Required와 같지 않습니다.
@Autowired는 @Required와 같지 않습니다.
@ Required-Annotation은 Spring에이 속성이 XML-File에 있어야한다는 것을 알려주고, XML-File에 주어진 정보에 의해 속성이 삽입되도록한다. 따라서이 주석을 전체적으로 보면,이 속성은 주석이 아닌 XML-configuration-File에 주어진 정보에 의해 주입되어야한다는 것을 Spring에 알리는 데 특화되어 있습니다. @ Autowire-Annotation을 사용할 때도 상관 없습니다.
@ Autowire-Annotation (코드 예제에서와 같이)은 ApplicationContext (a.k.a Spring-IoC-Container)에게 원하는 의존성을 주입하도록 지시한다. (어쨌든 Annotation이나 ApplicationContext의 XML-File을 사용한다면).
@ Required-Annotation은 ApplicationContext에게이 속성이 XML 파일 (ApplicationContext의 XML 파일)에 언급되어야 함을 알려주지 만, Annotation 자체는 종속성을 주입하도록 지시하지 않습니다. 따라서 XML 구성 파일에 있는지 확인하는 데 사용되지만 종속성을 주입하지는 않습니다. 속성은 XML 파일에 언급되어 있기 때문에 주입이 수행됩니다.
따라서 결국 XML 파일의 구성 때문에 주입이 수행되어야한다고 알려줍니다. 하지만 다시 : 주석은 종속성을 주입해야한다고 말하지는 않지만 XML-File에 언급되어야합니다. 그러면 종속성이 주입됩니다.
XML-File의 속성을 언급하면서 예를 들어 이러한 구성을 의미합니다.
<bean id="MyClass" class="com.myclasses.common.MyClass"> <property name="someProperty" value="ValueThatHasToBeInjected" /> </bean>
그렇다면 @ Autowired-Annotation을 통해 왜 사용해야합니까?
XML 구성 파일의 정보로 종속성을 주입해야하는 경우이를 사용해야합니다.
예를 들어 줄 수 있습니까?
글쎄,이 웹 사이트에는 이미 아주 좋은 예가있다. 이것도 설명되어 있습니다.
from https://stackoverflow.com/questions/18884670/autowired-vs-required-on-setter by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring RestTemplate 매개 변수가있는 HTTP Post에서 400 개의 잘못된 요청 오류가 발생합니다. (0) | 2019.04.03 |
---|---|
[SPRING] Thymeleaf : 속성 및 속성이있는 경우 텍스트 표시 (0) | 2019.04.03 |
[SPRING] 다중 경로가있는 봄 보안 http antMatcher (0) | 2019.04.03 |
[SPRING] 스프링에 콩이 없다면 빈 콜렉션을 쉽게 불러올 수 있습니까? (0) | 2019.04.03 |
[SPRING] 스프링은 CDI를 지원합니까? [닫은] (0) | 2019.04.03 |