더북(TheBook)

프로그램을 실행하면 다른 방법과 동일한 결과를 얻을 수 있습니다.

 초기화
      이름: John Mayer
      나이: 39
 초기화
기본 가수 이름 설정
      이름: Eric Clapton
      나이: 72
 초기화
 구성 도중 에러 발생: Error creating bean with name 'singerThree': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: class com.apress.prospring5.ch4.SingerWithJSR250  타입에는 반드시 age 프로퍼티를 설정해야 합니다.

 

세 가지 방법은 모두 제각각 장단점이 있습니다. 초기화 메서드를 사용하면 애플리케이션이 스프링과 결합되지 않는 효과가 있지만 초기화가 필요한 모든 빈을 빠짐없이 구성에 등록해야 합니다. InitializingBean 인터페이스를 사용하면 빈 클래스의 모든 인스턴스 초기화 콜백을 한번에 지정할 수 있지만 애플리케이션을 스프링에 결합해야 합니다. 애너테이션을 사용할 때는 메서드에 애너테이션을 적용해야 하고 사용하는 IoC 컨테이너가 JSR-250을 확실히 지원해야 합니다. 결국 어떤 접근 방법을 사용할지는 애플리케이션 요구사항에 따라야 합니다. 이식성이 중요하다면 초기화 메서드나 애너테이션을 사용합니다. 그렇지 않다면 InitializingBean 인터페이스를 사용해 애플리케이션이 해야 할 구성을 줄여서, 구성 오류로 인해 애플리케이션에 잠재하는 에러 발생 가능성을 낮춰야 합니다.

Note init-method나 @PostConstruct로 초기화 구성을 할 때는 접근 권한을 다르게 하여 초기화 메서드를 정의할 수 있는 장점이 있습니다. 초기화 메서드는 반드시 스프링 IoC 컨테이너가 빈 생성 시점에 한 번만 호출해야 합니다. 이를 반복적으로 호출하면 예상치 못한 결과가 발생하거나 심지어 애플리케이션에 장애가 발생합니다. 초기화 후 외부에서 또다시 초기화 메서드를 호출할 수 없게 하려면 초기화 메서드의 접근 권한을 private으로 정의해야 합니다. 이렇게 하면 스프링 IoC 컨테이너는 이 메서드를 리플렉션으로 호출할 수 있지만, 다른 빈이나 애플리케이션 코드에서는 이를 호출할 수 없습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.