본문 바로가기

SpringFramework Core - I. IoC 컨테이너

(101)
12.1. 기본 개념들 : @Bean : @Bean과 @Configuration 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-java-basic-concepts 스프링의 새로운 자바 설정 지원에 있어서 가장 중심적인 것은 @Configuration 어노테이션이 붙은 클래스들과 @Bean 어노테이션이 붙은 메소드들이다. @Bean 어노테이션은 메소드의 인스턴스화, 설정, 새로운 객체의 초기화를 명시하기 위해서 사용된다. 스프링의 XML 설정과 유사하게, @Bean 어노테이션은 요소와 같은 역할을 수행한다. @Bean 어노테이션이 붙은 메소드를 스프링 @Component와 함께 사용할 수 있다. 그러나 @Configuration bean들이 대부분 사용된..
12. 자바 기반의 컨테이너 설정 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-java 이 장에서는 스프링 컨테이너를 설정하기 위해서 자바 코드 내에서 어떻게 어노테이션들을 사용하는지에 대해 다룬다. 이를 위해 다음 주제들을 다루게 될 것이다. 기본 개념들 : @Bean과 @Configuration AnnotationConfigApplicationContext를 사용하여 스프링 컨테이너 인스턴스화하기 @Bean 어노테이션 사용하기 @Configuration 어노테이션 사용하기 자바 기반의 설정들 구성하기 Bean 정의 개요들 PropertySource 추출 @PropertySource 사용하기 작성에 있어..
11.3. JSR-330 표준 어노테이션들의 한계 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-standard-annotations-limitations 표준 어노테이션으로 작업을 할 때는 몇 가지 중요한 기능들을 사용할 수 없다는 점을 알고 있어야한다. 다음 표를 보자. 스프링 javax.inject.* javax.inject 제한 / 코멘트 @Autowired @Inject @Inject는 'required' 속성이 없음. 대신에 자바 8의 'Optional'을 쓸 수 있음. @Component @Named / @ManagedBean JSR-330은 구성이 가능한 모델을 제공하지 않음. 이름으로만 컴포넌트들을 식별할 ..
11.2. @Named와 @ManagedBean : @Component 어노테이션에 대응하는 표준 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-named @Component 대신에 @javax.inject.Named나 javax.annotation.ManagedBean을 사용할 수 있다. 다음 예시를 보자. import javax.inject.Inject; import javax.inject.Named; @Named("movieListener") // @ManagedBean("movieListener")도 물론 사용가능하다. public class SimpleMovieLister { private MovieFinder movieFinder; @Inject public ..
11.1. @Inject와 @Named로 의존성 주입하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-inject-named @Autowired 대신에 @javax.inject.Inject를 다음과 같이 사용할 수 있다. import javax.inject.Inject; public class SimpleMovieLister { private MovieFinder movieFinder; @Inject public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } public void listMovies() { this.movieFind..
11. JSR 330 표준 어노테이션 사용하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-standard-annotations 스프링 3.0을 사용하게 되면, JSR-330 어노테이션(의존성 역전)의 지원을 받을 수 있다. 이 어노테이션들은 스프링 어노테이션들과 같은 방법으로 스캔된다. 이 어노테이션들을 사용하기 위해서는 클래스패스에 관련 jar 파일들을 가지고 있어야 한다. ※ 메이븐을 사용한다면, 'javax.inject'를 표준 메이븐 저장소로부터 사용할 수 있다(https://repo1.maven.org/maven2/javax/inject/javax.inject/1/). 따라서 다음 의존성을 pom.xml에 ..
10.9. 후보 컴포넌트들의 인덱스 생성하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-index 클래스패스 스캐닝은 매우 빠르지만, 후보들의 정적인 리스트를 만들어놓음으로써 대규모 애플리케이션의 startup 퍼포먼스를 향상시킬 수 있다. 이 모드에서는 컴포넌트 스캔의 대상이 되는 모든 모듈들이 이 메커니즘을 사용해야만 한다. ※ context에게 특정 패키지들에 있는 후보들을 스캔해달라고 요청할 때처럼, @ComponentScan이나 디렉티브들은 생략되어서는 안 된다. ApplicationContext가 인덱스를 찾으면, 자동적으로 클래스패스 대신에 인덱스를 사용한다. 인덱스를 생성하기 위해서는..
10.8. 어노테이션으로 Qualifier 메타데이터 제공하기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-scanning-qualifiers @Qualifier 어노테이션은 'Qualifier들을 활용한 어노테이션 기반의 정교한 Autowiring'에서 알아봤다. 해당 장에서는 @Qualifier 어노테이션의 용례와, autowire 후보들을 정교하게 제어하게 해주는 커스텀한 Qualifier 어노테이션들에 대해 알아봤다. 그 예시들은 XML bean 정의에 기반했기 때문에, XML의 bean 요소의 자식 요소들인 'qualifier'나 'meta' 요소들을 통해 후보 bean 정의들에 수식자 메타데이터를 제공했다. 클래스패스 스캐..