복붙노트

[SPRING] Spring 3에서 applicationContext를 주입하는 모범 사례

SPRING

Spring 3에서 applicationContext를 주입하는 모범 사례

위의 제목에서와 같이, @Autowired annnotation에 직접적으로 applicationContext를 삽입하거나 Singleton Spring 빈에 ApplicationContextAware 인터페이스를 구현하는 것의 장단점에 대해서는 혼란 스럽다.

어떤 경우에 어떤 것을 선호합니까? 그리고 그 이유는 무엇입니까? 감사.

해결법

  1. ==============================

    1.사실, 둘 다 나쁘다. 둘 다 Spring 프레임 워크에 응용 프로그램을 묶어서 전체 반전 제어 개념을 뒤집습니다. 이상적인 세계에서, 여러분의 어플리케이션은 ApplicationContext에 의해 관리되는 것을 전혀 인식하지 않아야합니다.

    사실, 둘 다 나쁘다. 둘 다 Spring 프레임 워크에 응용 프로그램을 묶어서 전체 반전 제어 개념을 뒤집습니다. 이상적인 세계에서, 여러분의 어플리케이션은 ApplicationContext에 의해 관리되는 것을 전혀 인식하지 않아야합니다.

    이 원칙을 위반하기로 결정한 후에는 어떻게 행동 하느냐가 중요하지 않습니다. ApplicationContextAware는 적어도 버전 2.0 이후에 출시 된 레거시 버전입니다. @Autowired는 새로운 메커니즘이지만 거의 동일한 방식으로 작동합니다. 의미 론적으로 그것이 무엇인지 명확하게하기 때문에 아마도 ApplicationContextAware로 갈 것입니다.

  2. ==============================

    2.@Sean Patrick Floyd가 말했듯이, ApplicationContext의 필요성은 종종 나쁜 디자인 때문입니다. 그러나 때로는 다른 옵션이 없습니다. 이 경우에는 @Autowired를 사용하는 것을 선호합니다. 다른 모든 속성을 주입하는 방식이기 때문입니다. 그래서 MyRepository를 주입하기 위해 @Autowired를 사용한다면 왜 ApplicationContext 나 ​​다른 Spring 빈에 사용할 수 없습니까?

    @Sean Patrick Floyd가 말했듯이, ApplicationContext의 필요성은 종종 나쁜 디자인 때문입니다. 그러나 때로는 다른 옵션이 없습니다. 이 경우에는 @Autowired를 사용하는 것을 선호합니다. 다른 모든 속성을 주입하는 방식이기 때문입니다. 그래서 MyRepository를 주입하기 위해 @Autowired를 사용한다면 왜 ApplicationContext 나 ​​다른 Spring 빈에 사용할 수 없습니까?

    주석으로는 할 수없는 것들, 예를 들어 BeanNameAware에 대해서만 Spring 인터페이스를 사용합니다.

  3. ==============================

    3.싱글 톤에서 프로토 타입을 가져와야하는 경우 메소드 삽입을 사용할 수 있습니다. 기본적으로 필요한 메서드를 호출하는 추상 메서드를 만들고 해당 메서드를 호출 할 때마다 Spring이 프로토 타입을 반환합니다. 봄 설정에서 "lookup-method"를 정의합니다. 다음은 몇 가지 링크입니다. http://docs.spring.io/spring/docs/1.2.9/reference/beans.html#beans-factory-method-injection http://java.dzone.com/articles/method-injection-spring

    싱글 톤에서 프로토 타입을 가져와야하는 경우 메소드 삽입을 사용할 수 있습니다. 기본적으로 필요한 메서드를 호출하는 추상 메서드를 만들고 해당 메서드를 호출 할 때마다 Spring이 프로토 타입을 반환합니다. 봄 설정에서 "lookup-method"를 정의합니다. 다음은 몇 가지 링크입니다. http://docs.spring.io/spring/docs/1.2.9/reference/beans.html#beans-factory-method-injection http://java.dzone.com/articles/method-injection-spring

  4. ==============================

    4.스프링 클래스를 확장하지 않으므로 응용 프로그램은 항상 프레임 워크에서 분리됩니다. 대부분의 경우 ApplicationContext를 주입하고 싶지는 않지만 ApplicationContext에 정의 된 Bean을 주입해야합니다.

    스프링 클래스를 확장하지 않으므로 응용 프로그램은 항상 프레임 워크에서 분리됩니다. 대부분의 경우 ApplicationContext를 주입하고 싶지는 않지만 ApplicationContext에 정의 된 Bean을 주입해야합니다.

    가장 좋은 경우는 특별한 요구 사항이없는 한, 최소한 봄에 매우 간단 할 때까지 항상 최소한으로 유지하는 것입니다.

    그래서,

    빈 수명주기를 제어하려면 API를 읽고 사용자 정의 할 수 있지만 대부분의 경우 이러한 일반 설정이 작업을 수행합니다.

    여기 예시들이 있습니다.

  5. from https://stackoverflow.com/questions/9657961/best-practise-of-injecting-applicationcontext-in-spring3 by cc-by-sa and MIT license