복붙노트

[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. ==============================

    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. ==============================

    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 구성 파일의 정보로 종속성을 주입해야하는 경우이를 사용해야합니다.

    예를 들어 줄 수 있습니까?

    글쎄,이 웹 사이트에는 이미 아주 좋은 예가있다. 이것도 설명되어 있습니다.

  3. from https://stackoverflow.com/questions/18884670/autowired-vs-required-on-setter by cc-by-sa and MIT license