본문 바로가기

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

(28)
4.2.4. 내부 bean들 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-inner-beans 나 요소 안의 요소는 내부 bean을 정의한다. 다음 예시를 참고하라. 내부 bean 정의는 ID나 name의 정의를 필요로 하지 않는다. 설정이 되더라도 컨테이너가 그 값들을 식별자로 사용하지 않는다. 컨테이너는 생성에 있어서 scope 플래그 또한 무시한다. 왜냐하면 내부 bean들은 항상 익명이며 외부 bean과 함께 생성되기 때문이다. 내부 bean에 독립적으로 접근하는 것은 불가능하며, 자신을 감싸는 bean이 아닌 협력자 bean들에게 내부 bean을 주입하는 것 또한 불가능하다. 예외적으로 커스..
4.2.3. 다른 bean들(협력자들)에 대한 참조 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-ref-element 'ref' 요소는 와 내에서의 가장 마지막 요소다. 여기서 컨테이너의 관리를 받고 있는 다른 bean에 대한 참조 프로퍼티를 설정할 수 있다. 프로퍼티로 세팅하는 bean에게 참조된 bean은 의존성이 된다. 그리고 참조된 bean은 프로퍼티로 세팅되기 전에 의무적으로 초기화되어야 한다(만약 협력자가 싱글턴 bean이면 이미 컨테이너에 의해 초기화되어 있다). 모든 참조들은 궁극적으로 다른 객체에 대한 참조이다. bean이나 parent 속성을 통해 다른 객체의 ID나 이름을 특정했는가에 따라 Scoping..
4.2.2. idref 요소 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-idref-element idref 요소는 다른 bean의 id를 나 요소로 에러 없이 전달할 수 있게 해주는 간단한 방법이다. 다음 예시는 그 사용법을 보여준다. 위의 bean 정의 부분은 다음의 예시의 bean 정의 부분과 (런타임 동안에는) 정확히 동일하다. 전자의 방식이 후자의 방식보다 더 낫다. 왜냐하면 idref 태그를 사용하는 것은 컨테이너로 하여금 배포 시점에, 참조된 bean이 실제로 존재하는지 유효성을 검사하게 만들기 때문이다. 후자에서는, 클라이언트 bean의 프로퍼티인 targetName에 값이 전달될 때에..
4.2.1. Straight Values (원시 타입, String 등등) 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-value-element 요소의 'value' 속성은 사람이 읽을 수 있는 문자열 형태로 프로퍼티나 생성자 인자를 특정한다. 스프링의 변환 서비스는 이러한 값들을 String에서 프로퍼티나 인자의 실제 타입으로 변환해주는 데 사용된다. 다음 예시는 다양한 값들이 세팅되어 있는 것을 보여준다. 다음 예시는 더 풍부한 XML 설정을 위해 p-namespace를 사용한다. 위의 XML은 더 간결하다. 하지만 bean 정의를 생성할때 자동으로 프로퍼티를 완성시켜주는 IDE를 사용하지 않는 한, 오타는 설계 시점이 아닌 런타임에 밝혀진다..
4.2. 의존성과 설정에 대한 상세 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-properties-detailed 이전 파트에서 언급했듯이, bean 프로퍼티와 생성자 인자들을 정의함으로써 값들을 inline으로 정의하거나 다른 bean들을 참조하게 할 수 있다. 이를 위해 스프링의 XML 기반의 설정 메타데이터는 와 요소 속에서 sub-element 타입을 제공한다.
4.1.4. 의존성 주입의 예시 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-some-examples 다음 예시들은 setter 기반의 의존성 주입을 위해 XML 기반의 설정 메타데이터를 사용하고 있다. 스프링 XML 설정 파일의 일부분에서 몇몇 bean 정의들을 특정하고 있다. 다음 예시는 위에 따르는 ExampleBean 클래스이다. public class ExampleBean { private AnotherBean beanOne; private YetAnotherBean beanTwo; private int i; public void setBeanOne(AnotherBean beanOne) { th..
4.1.3. 의존성 주입 프로세스 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-dependency-resolution 컨테이너는 다음과 같이 의존성을 주입 작업을 한다. ApplicationContext가 모든 bean을 설명하고 있는 설정 메타데이터를 통해 생성되고 초기화된다. 설정 메타데이터는 XML, 자바 코드, 어노테이션을 통해 특정된다. 각각의 bean에 대해, 그들의 의존성은 properties, 생성자 매개변수, static 팩토리 메서드의 인자 형태로 표현된다. 이러한 의존성들은 bean이 실제로 생성될 때 bean에게 제공된다. 각각의 프로퍼티 또는 생성자 매개변수는 세팅될 값에 대한 실질..
4.1.2. setter 기반의 의존성 주입 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-setter-injection setter 기반의 의존성 주입은, 컨테이너가 기본 생성자를 호출하거나 매개변수 없는 static 팩토리 메서드를 호출하여 bean을 인스턴스화한 후에 bean의 setter 메소드를 호출함으로써 이루어진다. 다음 예시는 순수한 setter 주입만을 통해 의존성을 주입받을 수 있는 클래스를 보여준다. 이 클래스는 전통적인 자바이다. 컨테이너에 특정된 인터페이스, 클래스 또는 어노테이션에 의존성을 갖지 않는 POJO이다. public class SimpleMovieLister { // SimpleMo..