Spring DI(Dependency Injection) 스프링 의존성 주입

 

  • 객체의 의존성은 객체 자신이 아닌 프레임워크에 의해 주입되어진다.
  • 객체사이의 결합도, 의존성을 줄이고, 코드 재사용성을 높임, 가독성이 좋음. 테스트하기에 좋음.
  • BeanContainer 빈을 생성하고, configuration 명령에의해 의존성주입을 수행

 

  • SpringContainer
    • 스프링 프레임워크의 코어 컴포넌트
    • application 구성하는 빈들을 관리
      • 빈들을 생성, 서로연결, lifecycle관리
    • configuration metadata
      • XML
      • Java annotation
      • Java-based Configuration
      • 표현되어진다.
    • 개의 타입의 containers
      • BeanFactory
      • ApplicationContext
      • ApplicationContext or BeanFactory 객체의 getBean("id") 사용하여 객체를 가져온다.

 

 

 

DI 장점

  • 의존성을 감소
  • 코드의 재사용성
  • 테스트에 좋은 코드
  • 가독성이 좋음.

 

  • Bean?
    • 스프링에서 POJO(Plain Old Java Object) bean이라고 불려지며 스프링 컨테이너에 의해 인스턴스화되고, 관리되고, 생성되어진다.
    • 사용자가 컨테이너에게 제공한 configuration metadata(XMLfile)에의해 빈들이 생성되어진다.
    • 빈들을 관리하기 위한 속성들을 정의
      • class : 자바 클래스 이름.
      • id : 빈에 대한 identifier정의
      • scope : 객체에대한 scope정의
      • constructor-arg : 생성시점의 생성자 매개변수값
      • property :  생성되는 시점에 setter 넘겨지는 인자값

 

 

  • DI 방식
    • 생성자에의해 주입되는방식
      • constructor-arg 속성을 이용하여 주입.
    • setter에의해 주입되는 방식
      • property 속성을 이용하여 주입.

 

  • Annotation 이용한 DI설정
    • @Required : 해당 프로퍼티를 xml 반드시 명시하도록 알림
    • @Autowired : 자동으로 의존성을 주입, 해당 객체의 타입을 확인 하여 자동적으로 주입
    • @Qualifier : 만약 같은 타입의 빈이 두개가 존재할 경우 해당 어노테이션과 value값을 지정하여 구분을 지어 빈을 적용
    • @Resource : name(Bean id)에의해서 자동적으로 의존성 주입
    • 보통 싱글톤으로 사용되기 때문에 autowire 자주 쓰여진다.

댓글

가장 많이 본 글