▼ 표 2-1 장단점: 스프링 컨텍스트에 빈을 추가하는 두 방법을 비교하여 언제 어떤 것을 사용할지 이해한다
|
@Bean 애너테이션 사용 |
스테레오타입 애너테이션 사용 |
|
1. 스프링 컨텍스트에 추가할 인스턴스의 생성을 완전히 제어할 수 있다. @Bean이 달린 메서드 안에서 인스턴스를 생성하고 구성하는 것은 사용자 책임이다. 스프링은 해당 인스턴스만 받아 컨텍스트에 그대로 추가한다. 2. 이 메서드를 사용하면 동일한 타입의 인스턴스를 스프링 컨텍스트에 더 추가할 수 있다. 2.2.1절에서 우리는 스프링 컨텍스트에 Parrot 인스턴스 세 개를 추가했다. 3. @Bean 애너테이션을 사용하여 스프링 컨텍스트에 모든 객체 인스턴스를 추가할 수 있다. 즉, 인스턴스를 정의한 클래스가 앱 내에서 정의되지 않아도 추가할 수 있다. 앞서 우리는 스프링 컨텍스트에 String과 Integer 타입을 추가했다. 4. 생성하는 각 빈에 대해 별도의 메서드를 작성해야 하므로 앱에 상용구 코드가 추가된다. 이런 이유로 프로젝트에서 @Bean을 사용하기보다는 스테레오타입 애너테이션을 선호한다. |
1. 프레임워크가 인스턴스를 생성한 후에만 인스턴스를 제어할 수 있다. 2. 이렇게 하면 컨텍스트에 클래스의 인스턴스를 하나만 추가할 수 있다. 3. 스테레오타입 애너테이션은 애플리케이션이 소유한 클래스의 빈을 생성하는 데만 사용할 수 있다. 예를 들어 2.2.1절에서 한 것처럼 @Bean 애너테이션을 사용하여 String 또는 Integer 타입의 빈을 추가할 수 없다. 변경할 클래스를 소유하고 있지 않기 때문에 스테레오타입 애너테이션으로 해당 타입의 빈을 추가할 수 없다. 4. 스테레오타입 애너테이션을 사용하여 스프링 컨텍스트에 빈을 추가해도 앱에 상용구 코드가 추가되지 않는다. |