Spring - DI

skyju·2022년 10월 18일

Spring

목록 보기
2/7

DI(Dependency Injection 의존성 주입)

  • 스프링의 특징으로, 객체를 직접 생성하는 것이 아니라 주입을 시켜주는 방식을 뜻한다.
  • DI를 활용하면 모듈 간의 결합도가 낮아지고 유연성이 높아지므로 DI는 IoC를 실천하는 한 방식이라 할 수 있다.

DI 용어 정리

  • 빈(Bean)
    • 스프링이 IoC방식으로 관리하는 Object를 말한다.
    • 스프링이 직접 그 생성과 제어를 담당하는 객체만을 Bean이라고 부른다.
  • 빈 팩토리(Bean Factory)
    • 스프링이 IoC를 담당하는 핵심 Container
    • Bean을 등록, 생성, 조회, 반환하는 기능을 담당
    • 일반적으로 BeanFactory를 바로 사용하지 않고 이를 확장한 ApplicationContext를 이용한다.
  • 어플리케이션 컨텍스트(ApplicationContext)
    • 스프링이 제공하는 각종 부가 서비스를 추가 제공
    • BeanFactory라 부를 때는 주로 Bean의 생성과 제어의 관점에서 이야기하는 것인 반면 Application-Context는 스프링이 제공하는 Application 지원 기능을 모두 포함하여 이야기하는 것이라고 보면 된다.

DI

  • 크게 XML을 통한 방식과 Annotaion을 이용한 방식으로 나뉜다.

빈 생성 범위 : 싱글톤 빈(Singleton Bean)

스프링 빈은 기본적으로 싱글톤으로 만들어진다. 그러므로 Container가 제공하는 모든 Bean의 Instance는 동일하다.
항상 새로운 Instance를 생성하여 반환하게 하고 싶으면 scopeprototype으로 변경해야 한다.

  • Annotation으로 Bean설정을 할 경우 component-scan을 설정해야 한다.

Spring Bean 설정과 관련된 Annotation의 종류

@Repository @Service @Controller @Component

DI - XML

  • Application에서 사용할 Spring 자원들을 설정하는 파일
  • Root tag는 <beans>
  • <bean> : Spring Container가 관리할 Bean 객체를 setting

    <bean>의 기본속성
    name : 주입 받을 곳에서 호출 할 이름 설정
    id : 주입 받을 곳에서 호출 할 이름 설정(유일 값)
    class : 주입 할 객체의 클래스
    factory-method : Singleton pattern으로 작성된 객체의 factory method 호출

  • bean 객체 얻기
    설정 파일에서 설정한 bean을 Container가 제공하는 주입기 역할의 api를 통해 주입 받는다.
ApplicationContext context = new ClassPathXmlApplicationCntext("");

1. 생성자(Constructor) 이용

<bean>의 하위 태그로 <constructor-arg>를 설정한다.
refvalue 같은 하위 태그를 이용하여 설정한다.

2. setter(Property) 이용

<bean>의 하위 태그로 <property>를 설정한다.
refvalue 같은 하위 태그를 이용하여 설정한다.

profile
https://github.com/skyju

0개의 댓글