이 글은 “토비의 스프링” 책 내용을 정리한 글입니다.

만약 저작권 관련 문제가 있다면 “gunjuko92@gmail.com”로 메일을 보내주시면, 바로 삭제하도록 하겠습니다.

토비 스프링 - 기타 빈 설정 메타정보

1. 빈 이름

  • 빈 아이디와 빈 이름 모 두 특정 빈을 구분해서 가리키기 위해 사용되는 빈 식별자를 말한다.
  • 빈은 하나 이상의 식별자를 가질 수 있으며, 빈의 식별자는 빈이 정의된 애플리케이션 컨텍스트 내에서 고유해야 한다.

id

  • id는 문서 전체에서 고유해야 하며, 작성 규칙에 따라야한다.
  • 관례적으로 id에 사용하는 값은 빈을 대표하는 타입 이름을 첫 글자만 소문자로 바꿔서 사용한다.
  • 생략 가능하다. 생략한 경우 스프링 컨테이너가 자동으로 빈의 아이디를 부여해준다.

name

  • name에는 특별한 제약이 없다.
  • id와 달리 여러 개의 이름을 지정할 수 있다.

애노테이션에서 빈 이름

  • @Component와 같은 스테레오타입의 애노테이션을 이용해서 빈으로 등록하는 경우, 클래스 이름 첫 글자만 소문자로 바꿔서 빈 이름으로 사용한다.
  • @Bean 메소드를 이용해 빈을 정의하는 경우에는 메소드 이름이 그대로 빈 이름이 된다.
  • 스테레오타입 애노테이션으로 빈을 등록하는 경우, 아래와 같은 방법으로 빈 이름을 지정할 수도 있다.
    • 디폴트 엘리먼트 값 이용 : @Component(“myUserService”)
    • @Named 애노테이션 사용
  • @Bean 메소드로 빈을 등록하는 경우 name 엘리먼트를 이용할 수 있다. name 엘리먼트는 String 배열이므로 하나 이상의 이름을 지정할 수도 있다.

2. 빈 생명주기 메소드

초기화 메소드

  • 빈 오브젝트가 생성되고 DI 작업까지 마친 다음에 실행되는 메소드를 말한다.
  • DI를 통해 모든 프로퍼티가 주입된 후에야 가능한 초기화 작업을 한다.
  • 초기화 메소드를 지정하는 방법은 총 4가지가 있다.
    • 초기화 콜백 인터페이스 : InitializaingBean 인터페이스를 구현해서 빈을 작성한다. afterPropertySet() 메소드를 적절하게 구현하면 된다.
    • init-method 지정 : <bean> 태그의 init-method 애트리뷰트를 넣어서 초기화 작업을 수행할 메소드 이름을 지정할 수 있다. @Bean 메소드를 이용해 빈을 정의하는 경우 init-method 엘리먼트를 사용해서 초기화 메소드를 지정할 수 있다.
    • @PostConstruct : 초기화를 담당할 메소드에 @PostContruct 애노테이션을 부여해주기만 하면 된다. @PostConstruct는 자바의 표준 공통 애노테이션이므로 스프링 콜백 인터페이스를 사용하는 것보다 더 좋다. 또한 init-method 설정보다 직관적이다. 따라서 책에선 이 방식을 가장 권장하고 있다.

제거 메소드

  • 제거 메소드는 컨테이너 종료될 때 빈이 사용한 리소스를 반환하거나 종료 전에 처리해야 할 작업을 수행한다.
  • 제거 콜백 인터페이스 : DisposableBean 인터페이스를 구현해서 destroy()를 구현하는 방법
  • destroy-method : <bean> 태그에 destroy-method를 제거 메소드를 지정할 수 있다. @Bean 애노테이션의 destroyMethod 엘리먼트를 이용해서 제거 메소드를 지정할 수 있따.
  • @PreDestory : 컨테이너가 종료될 때 실행될 메소드에 @PreDestroy를 붙여주면 된다.

3. 팩토리 빈과 팩토리 메소드

  • 팩토리 빈 : 생성자 대신 오브젝트를 생성해주는 코드의 도움을 받아서 빈 오프젝트를 생성하는 것
    • 팩토리 빈 자신은 빈 오브젝트로 사용되지 않는다.
    • 빈 오브젝트를 만들어주는 기능을 제공
  • FactoryBean 인터페이스
    • getObject() 메소드를 적절히 구현한다.
  • 스태틱 팩토리 메소드
    • 클래스의 스태틱 메소드를 호출해서 인스턴스를 생성하는 방식
    • <bean> 태그의 factory-method 애트리뷰트를 이용해서 스태틱 팩토리 메소드를 지정한다.
  • 인스턴스 팩토리 메소드
    • 인스턴스 메소드를 이용해 빈 오브젝트를 생성할 수도 있다. 팩토리 빈의 오브젝트 메소드를 이용해 빈 오브젝트를 생성하는 경우 사용한다. FactoryBean과 유사하지만 스프링 인터페이스에 종속적이지 않다.
    • <bean> 태그의 factory-bean과 factory-method 애트리뷰트를 모두 사용한다. 이때 팩토리 기능을 제공할 빈은 따로 등록해야한다.
  • @Bean 메소드
    • 자바 코드에 의한 빈 등록 방식에서 사용하는 @Bean 메소드도 일종의 팩토리 메소드다.