티스토리 뷰

Spring

의존성 주입 (Dependency Injection)

snail voyager 2020. 5. 11. 22:51
728x90
반응형

Spring DI

  • 의존 : 한 클래스가 다른 클래스의 메서드를 실행할 때 '의존'한다

  • 의존하는 객체를 직접 생성하는 대신 의존 객체를 전달받는 방식 : 생성자, setter()

    • 생성자 방식 :
      • Bean 객체를 생성하는 시점에 모든 의존 객체가 주입
      • 생성자의 파라미터 수가 많아지면 생성자 코드를 확인해야함
    • setter() 방식 :
      • 메서드 이름을 통해 어떤 의존 객체가 주입되는지 알 수 있음
      • 필요한 의존 객체가 전달받지 못해도 Bean 객체가 생성되기 때문에 문제
  • 객체를 생성하고 의존 객체를 주입하는 기능을 분리하여 변경의 유연함 : @Configuration Spring 설정 클래스

  • ApplicationContext(BeanFactory)는 Bean 객체의 라이프 사이클을 관리 : 스프링 컨테이너

  • 설정 클래스를 이용하여 컨테이너를 생성하고 컨테이너가 Bean 객체 관리

  • Bean 객체는 싱글톤 객체. @Bean 붙은 메서드 이름을 Bean 객체 이름으로 사용

  • @Import : 설정 클래스에서 함께 사용할 다른 설정 클래스를 지정

의존 자동 주입

  • @Autowired : 스프링 자동 주입 기능. 해당 타입의 Bean을 찾아 필드에 할당

    • 생성자, setter()를 사용해서 의존 주입을 명시하지 않아도 됨
    • 메서드에 자동주입 시 파라미터 타입에 해당하는 Bean 객체를 찾아 주입
  • @Qualifier : 자동 주입 가능한 Bean이 두개 이상일 때 주입할 빈을 지정

    • @Autowired 처럼 필드와 메서드에 모두 적용 가능
    • @Qualifier 없다면 Bean 객체 이름(메서드명)으로 구분

Component Scan

  • @ComponentScan : 스프링이 직접 클래스를 검색해서 Bean 으로 등록해주는 기능

    • basePackages 속성값 : 스캔 대상 패키지 목록 지정
    • excludeFilters 속성값 : 스캔 대상 제외
  • @Component : 컴포넌트 스캔 대상 클래스

    • @Controller, @Service, @Repository, @Aspect, @Configuration 도 스캔 대상
    • 자동 등록된 Bean 이름은 클래스 이름의 첫 글자를 소문자로 바꾼 값
    • 수동 등록한 Bean이 우선으로 등록하여 한개만 존재
728x90
반응형

'Spring' 카테고리의 다른 글

Spring JDBC (Java DataBase Connection)  (0) 2020.05.16
AOP (Aspect Oriented Programming)  (0) 2020.05.12
Eclipse에서 Maven 프로젝트 생성, Git Hub 연동  (0) 2020.05.02
Spring 버전 차이  (0) 2019.07.15
JPA Hibernate  (0) 2019.07.14
반응형
300x250