본문 바로가기

SpringFramework Core - I. IoC 컨테이너/4. 의존성

(28)
4.6.2. 임의적인 메서드 교체 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-arbitrary-method-replacement '임의적인 메서드 교체'는 lookup 메서드 주입보다 조금 덜 유용한 메서드 주입 방식이다. 즉, 임의적인 메서드를 다른 메서드 구현체로 교체하는 것이다. 이 기능이 실제로 필요할 때까지는 이 부분을 안심하고 건너뛰어도 괜찮다. (일단 건너뜀...)
4.6.1. 메서드 주입 검색 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lookup-method-injection 메서드 주입 검색은 메서드를 오버라이드하게 해주고, 다른 bean에 대한 검색 결과를 반환하게 해주는 컨테이너의 능력을 말한다. 검색은 보통 앞선 부분에서 서술했던 프로토타입 bean과 관련된다. 스프링 프레임워크는 CGLIB 라이브러리의 바이트 코드 생성을 사용하여 이러한 메서드 주입을 구현한다. 이를 통해 메서드를 오버라이드하는 서브클래스를 동적으로 생성한다. 이 동적인 서브클래스가 작동하도록 하기 위해서는, 서브클래스가 final이어서도 안되고 오버라이드될 메소드가 ..
4.6. 메서드 주입 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-method-injection 대부분의 애플리케이션에서 대부분의 bean들은 싱글턴이다. 싱글턴 bean이 다른 싱글턴 bean과 협력해야하거나 싱글턴이 아닌 bean이 다른 싱글턴이 아닌 bean과 협력해야할 때, 여러분은 그 중 한 쪽을 다른 쪽의 프로퍼티로 세팅할 것이다. 문제는 bean들의 라이프사이클이 다를 때다. 싱글턴 bean A가 메서드를 호출할 때마다 프로토타입 bean B에 의존한다고 가정해보자. 컨테이너는 싱글턴 bean A를 딱 한번만 만든다. 그리고 프로퍼티를 세팅할 기회를 딱 한번만 준다...
4.5.2. Autowiring으로부터 bean 제외시키기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-autowire-candidate bean마다 autowiring을 해주는 환경에서는, bean을 autowiring으로부터 제외시킬 수 있다. 스프링의 XML 형식에서는 요소의 'autowire-candidate' 속성을 false로 세팅하면 된다. 컨테이너는 그 bean을 autowiring 인프라에서(@Autowired 같은 어노테이션 스타일의 설정에서도) 사용할 수 없게 만든다. ※'autowire-candidate' 속성은 타입 기반의 autowiring에만 적용될 수 있도록 설계되었다. 이 속성은 aut..
4.5.1. Autowiring의 한계와 단점 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-autowired-exceptions Autowiring은 프로젝트 전반에 걸쳐 일관성 있게 사용될 때 가장 좋다. 만약 일반적으로 autowiring이 사용되지 않는 경우라면, 개발자는 한 두개의 bean을 wire하기 위해 autowiring을 사용하는 것을 주저할 것이다. autowiring에 대한 다음 한계와 단점을 고려해보자. 'property'와 'constructor-arg' 세팅의 명확한 의존성들은 언제나 autowiring을 오버라이드한다. 또한 'simple properties'들은 autowire할 수 없다...
4.5. 협력자들 Autowiring하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-autowire 스프링 컨테이너는 협력하는 bean들의 관계를 autowire할 수 있다. 스프링이 ApplicationContext의 내용물들을 훑어보면서, 자동적으로 협력자들 사이의 관계를 맺어주도록 할 수 있다. Autowiring은 다음의 장점들이 있다. Autowiring은 프로퍼티와 생성자 매개변수들을 설정해줘야할 필요성을 크게 줄여준다(이 챕터에서 논의되는 'bean template' 같은 메커니즘들이 이와 관련하여 의미가 있다). Autowiring은 객체들이 진화함에 따라 설정을 업데이트 시켜준다...
4.4. Lazy-initialized Beans 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lazy-init 기본적으로, ApplicationContext 구현체들은 초기화 과정 중에 싱글턴 bean들을 열심히 만들어낸다. 일반적으로 이런 사전 인스턴스화는 바람직하다. 설정이나 환경적인 에러들이 즉시 발견되기 때문이다. 하지만 이런 활동이 바람직하지 않은 경우에는 bean을 lazy-initialized라고 표시하여 사전 인스턴스화를 막을 수 있다. lazy-initialized bean은 IoC 컨테이너에게 startup될 때가 아니라 요청 받았을때 자신을 만들게끔 한다. XML에서 이 행동은 요소의 ..
4.3. depends-on 사용하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-dependson 만약 bean이 다른 bean에게 의존성을 제공한다면, 이는 주입받는 bean의 프로퍼티가 된다는 것을 의미한다. XML 기반의 설정 메타데이터에서는 보통 요소를 통해 이루어진다. 그러나 가끔은 의존성이 덜 직접적인 경우가 있다. 데이터베이스 드라이버 등록처럼 static한 initializer가 발동되어야 하는 경우가 그 예시다. 'depends-on' 속성은 이 속성을 사용하는 bean이 초기화되기 전에, 의존성 bean들이 초기화될 수 있도록 명확하게 강제한다. 다음 예시는 하나의 bean에..