해당 챕터에서는 다음과 같은 6가지 질문에 대해서 대답을 하면 된다고 하신다.
- 질문 1: Spring Container vs Spring Context vs IOC
Container vs Application Context- 질문 2: Java Bean vs Spring Bean
- 질문 3: Spring 프레임워크에서 관리하는 모든 빈을 나열하는 방법은 무엇인가요?
- 질문 4: 여러 일치하는 빈이 있는 경우 어떻게 처리되나요?
- 질문 5: Spring은 객체를 관리하고 오토 와이어링을 수행하고 있습니다.
그런데 우리는 객체를 생성하기 위한 코드를 작성하고 있지 않나요?
Spring에게 객체를 생성하도록 어떻게 하나요?- 질문 6: Spring이 정말로 모든 것을 쉽게 만들고 있는 건가요?
그렇지만 5,6 번에 대한 질문은 이후 챕터에서 대답을 들어볼 수 있다고 하셔서 1~4번까지 우선 알아보도록한다!
그래서 이번 챕터는 답변을 해보면서 시작하려고 한다.
기능들이 많기 때문에 Application Context 를 많이 사용한다. 강의를 해주시는 분도 20년동안 Spring을 사용했지만 BeanFactory는 거의 안 썼다고 한다.
사실 이 질문에는 POJO 관련한 언급도 나온다.
java.io.Serializable
를 implements 받아야 한다.var context = new AnnotationConfigApplicationContext(GameConfig.class);
context.getBeanDefinitionNames();
다음과 같이 getBeanDefinitionNames를 사용해서 긁어올 수 있다.
context.getBean(GamingConsole.class).up();
해당하는 경우에서 클래스의 형태로 부르게 되었을 경우
@Bean
@Primary
public GamingConsole game(){
return new MarioGame();
}
@Bean
public GamingConsole game2(){
return new PacmanGame();
}
@Bean
@Qualifier("pacman")
public GamingConsole game2(){
return new PacmanGame();
}
@Bean
@Primary
public GameRunner gameRunner2(@Qualifier("pacman") GamingConsole game){
return new GameRunner(game);
}
위와 같은 코드를 작성한 경우 @Primary
가 작성되어진 친구를 더 우선으로 찾는다. 그리고 @Qualifier
과 같은 경우 디테일하게 이름을 지정하여 다음과 같이 gameRunner2
와 같이
파라미터로 자동으로 매핑하게 되었을 때 @Qualifier
를 통해 지정해줄 수 있다.
요약하면 다음과 같다.
@Primray는 하나의 구현체만을 사용하게 하는 것
@Qualifier는 @Primary보다 귀찮지만, 디테일하게 접근하고 사용할 수 있음
--> @Primary보다 우선순위가 높다!
- 질문 5: Spring은 객체를 관리하고 오토 와이어링을 수행하고 있습니다.
그런데 우리는 객체를 생성하기 위한 코드를 작성하고 있지 않나요?
Spring에게 객체를 생성하도록 어떻게 하나요?- 질문 6: Spring이 정말로 모든 것을 쉽게 만들고 있는 건가요?
@Configuration
public class GameConfig {
@Bean
@Primary
public GamingConsole game(){
return new MarioGame();
}
@Bean
@Qualifier("pacman")
public GamingConsole game2(){
return new PacmanGame();
}
@Bean
//@Primary
public GameRunner gameRunner(){
return new GameRunner(game());
}
5번과 같은 경우는 사실 Configuration을 사용해서 @Bean 을 생성해서 진행하였다. 그렇지만 이게 객체를 내가 만들었지 Spring이 만들어준 건 아니다.
그리고 6번과 같은 경우 생각해보게 되었을 때 간단해졌나? 라는 의문이 들긴 하여서 이 해당 질문에 대한 정보들은 이후 챕터에서 알아보도록 한다고 하셨다!
효준 더 스프링킹..