[Spring] Configuration metadata(빈 설정 메타정보)

4415 단어 SpringSpring

CS 공부 16일차. 오늘도 역시 토비의 스프링 3.1을 읽고 내용을 정리해 보았습니다.

BeanDefinition

  • 순수한 오브젝트로 표현되는 빈 생성 정보
  • 이름만 다르게 해서 재사용 가능.
  • BeanDefinition에 이름 정보는 포함되지 않지만 나중에 등록될 때 이름을 부여해 줄 수 있다.
  • beanClassName, parentName, scope, annotationMetaData 등을 설정할 수 있다.

Bean 종류

Application Logic Bean

  • DAO, Service Object, Controller Object 등

Application Infra Bean

  • DataSource 등

Container Infra Bean

  • 빈 생성시에 프록시 생성같은 작업을 지원하는 빈

  • <context:component-scan />, @ComponentScan 등

Bean 등록 방법

  1. XML 태그
    <bean id=“hello” class=“springbook.learningtest.spring.ioc.bean.Hello></bean> 
    
    
  2. XML 전용태그
    <jdbc:embedded-database type=“HSQL”></jdbc:embedded-database>
    
  3. Annotation
  • Default Bean Scanner로 Stereotype Annotation 사용
  1. 자바 코드
  • 하나의 클래스 안에 여러개의 빈을 정의할 수 있다. @을 이용해 메타정보를 추가.
  • @Configuration + @Bean
  • AnnotationConfigWebApplicationContext를 사용해야 한다.
  • @Configuration을 붙이지 않고 설정한 @Bean은 싱글톤이 보장되지 않는다.

XML

  • 장점 : 모든 빈을 XML에서 확인할 수 있다. 설정정보를 자바 코드에서 분리하여 POJO 코드를 유지할 수 있다.
  • 단점 : 빈의 개수가 많아지면 관리가 번거롭다.

Bean Scanner

  • 장점 : 컴파일러나 IDE를 통한 타입 검증이 가능하다. 복잡한 빈 설정이나 초기화 작업을 손쉽게 적용할 수 있다.

  • 단점 : 전용 태그 사용이 어렵다.

  • 특정 @이 붙은 클래스를 자동으로 찾아서 빈으로 등록해주는 방식

  • 지정된 경로 아래에 있는 모든 클래스를 대상으로 필터를 적용

  • Bean Scanner가 감지한 클래스는 클래스 이름을 아이디로 사용하여 빈으로 등록된다.(ex : id=sampleClass, classname=SampleClass)

  • 아이디를 직접 지정할 수도 있다.(ex: @Component(“sampleID”))

  • 한 클래스당 하나의 빈만 등록할 수 있다.

  • XML로 등록하거나(<context: component-scan>) Bean Scanner가 내장된 Application Context를 사용하여 이용할 수 있다.

  • 서블릿 컨텍스트와 루트 컨텍스트에서 중복으로 하나의 빈을 스캐닝 할 수 있으니 범위를 잘 설정해야 한다.

Stereotype Annotation

  • 디폴트 필터에 적용되는 애노테이션
  • @Component
  • @Repository : DAO 또는 Repository 클래스에 사용
  • @Service
  • @Controller : Presentation 계층의 MVC controller에 사용.

Bean Factory

  • 오브젝트 생성과 의존관계 주입을 담당하는 컨테이너
  • Spring Container라고도 한다.

Factory Bean

  • 생성자 대신 오브젝트를 생성해주는 코드를 통해 빈 오브젝트를 생성

  • 빈 오브젝트를 만들어주는 기능만 제공

  • FactoryBean, factory-method, @Bean 메소드 등을 이용해 만들 수 있다.

ID & Name

id

  • XML로 정의한다면 XML문서 내에서 고유해야 한다.

  • 공백이 들어갈 수 없다.

  • 첫글자는 알파벳과 언더바(_), 나머지 글자는 여기에 숫자와 . 도 허용된다.

  • 특수문자는 사용할 수 없다.

  • 한글 사용 가능

  • 타입의 첫글자를 소문자로 바꿔서 사용한다. 따라서 생략 가능

name

  • .나 ;을 이용하여 여러 이름 지정 가능

초기화 메소드

  • 빈 오브젝트가 생성되고 DI 된 후에 실행되는 메소드

  • InitializingBean, init-method, @PostConstruct, @Bean(init-method)를 사용하여 설정할 수 있다.

제거 메소드

  • 컨테이너가 종료될 때,빈이 사용한 리소스를 반환하거나 종료 전에 처리해야 할 작업을 수행한다.

  • DisposableBean, destroy-method, @PreDestroy, @Bean(destroyMethod)를 사용하여 설정할 수 있다.

좋은 웹페이지 즐겨찾기