ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring IoC/DI
    Java & Spring/기본 개념 정리 2021. 1. 30. 00:11
    반응형

    Spring IoC/DI 컨테이너

    • 컨테이너

      • 인스턴스의 생명주기를 관리

      • 생성된 인스턴스에게 추가 기능을 제공

      • ex ) WAS의 Servlet 컨테이너

    • IoC(Inversion of Control)

      • 제어의 역전

        • 컨테이너가 개발자(코드) 대신 오브젝트의 제어권을 가지고 있어서 제어의 역전이라함
      • ex) 서블릿 클래스는 개발자가 만들지만, 서블릿을 메소드에 맞게 호출하는 것은 WAS

    • DI(Dependency Injection)

      • 의존성 주입

        • 클래스 사이의 의존 관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결
      • 어노테이션을 통해 사용

      • 코드 예시

      •     // 미적용 사례
        class 엔진 {
        
        }
        
        class 자동차 {
             엔진 v5 = new 엔진();
        }
      •     // 적용 사례
        @Component
        class 엔진 {
        
        }
        
        @Component
        class 자동차 {
             @Autowired
             엔진 v5;
        }
    • Spring에서 제공하는 IoC/DI 컨테이너

      • BeanFactory

        • IoC/DI에 대한 기본 기능을 가짐

        • ApplicationContext

          • BeanFactory의 모든 기능 포함

          • 일반적으로 BeanFactory보다 추천됨

          • 트랜잭션처리, AOP 등에 대한 처리 가능

          • BeanPostProcessor, BeanFactoryPostProcessor등을 자동으로 등록하고 국제화 처리, 어플리케이션 이벤트 등을 처리

      • BeanPostProcessor

        • 컨테이너의 기본 로직을 오버라이딩

        • 인스턴스화와 의존성 처리 로직 등을 개발자가 원하는대로 구현하도록 함

      • BeanFactoryPostProcessor

        • 설정된 메타 데이터를 커스터마이징 가능
      • AOP

        • Aspect Oriented Programming

          • 관점 지향 프로그래밍

          • 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누고 그 관점을 기준으로 각각 모듈화를 하겠다.

        • 여러 부분에서 중복된 코드들을 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용

        • 주요 개념

          • Aspect

            • 흩어진 관심사(여러 군데에 중복된 코드들)를 모듈화한 것

            • 주로 부가기능을 모듈화함

          • Target

            • Aspect를 적용하는 곳(클래스, 메소드 ..)
          • **Advice**

            • 실직적으로 어떤 일을 해야하는가에 대한 것

            • **실질적인 부가기능을 담은 구현체**

          • JointPoint

            • Advice가 적용될 위치, 끼어들 수 있는 지점

            • 메소드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용 가능

          • PointCut

            • JointPoint의 상세 스펙을 정의

            • `A란 메소드의 진입 시점에 호출할 것`과 같이 구체적으로 Advice가 실행될 지점을 정할 수 있음

        • Spring AOP 특징

          • 프록시 패턴 기반의 AOP 구현체

            • 접근 제어 및 부가기능을 추가하기 위해 프록시 객체를 씀
          • 스프링 Bean에만 AOP 적용 가능

          • 모든 AOP 기능을 제공하는 것이 아닌, 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 지원하는 목적

            • 중복 코드, 프록시 클래스 작성의 번거로움, 객체간 관계 복잡도 증가 등

    Reference

    https://www.boostcourse.org/web326/lecture/58970/

    https://engkimbs.tistory.com/746

    반응형

    'Java & Spring > 기본 개념 정리' 카테고리의 다른 글

    HandlerMethodArgumentResolver  (0) 2021.07.13
    Spring boot actuator  (0) 2021.07.13
    xml 설정과 Java Config 설정  (2) 2021.04.09

    댓글

Designed by Tistory.