길민호(ethan.mino)
코딩수첩
길민호(ethan.mino)
전체 방문자
오늘
어제
  • 분류 전체보기 (215)
    • Computer Science (0)
    • Web (6)
      • CSS (0)
      • HTML (0)
    • Node.js (0)
    • Javascript (2)
    • Java (46)
      • Spring (27)
      • Jsp (0)
    • C\C++ (2)
    • Programming (0)
    • AI (0)
    • Database (7)
    • Git (5)
    • Algorithm (119)
      • Stack (0)
      • Queue (0)
      • Linked List (0)
      • Sort (0)
      • Simulation (27)
      • Recursion (0)
      • Backtracking (4)
      • Two Pointer (3)
      • Dynamic Programming (19)
      • Greedy (10)
      • Graph (3)
      • Dijkstra (1)
      • BFS\DFS (8)
      • Floyd (1)
      • MST (4)
      • Tree (4)
      • Binary Search (8)
      • Binary Search Tree (4)
    • IntelliJ (4)
    • Vscode (0)
    • Operating System (0)
    • 후기 (3)
    • 성장일지 (13)
    • 스터디 (7)
    • 설치 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅡ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
길민호(ethan.mino)

코딩수첩

Spring IoC/DI 컨테이너
Java/Spring

Spring IoC/DI 컨테이너

2020. 7. 11. 06:43

1. 컨테이너란?

  • 컨테이너는 인스턴스의 생명주기를 관리한다.
  • 생성된 인스턴스들에게 추가적인 기능을 제공한다.
  • 예를 들어 Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있다고 말한다. 개발자가 서블릿 클래스를 작성했지만, 실제로 메모리에 올리고 실행하는 것은 WAS가 가지고 있는 Servlet 컨테이너이다. Servlet 커테이너는 동일한 서블릿에 해당하는 요청을 받으면, 또 메모리에 올리지 않고 기존의 메모리에 올리간 서블릿을 실행하여 그 결과를 웹 브라우저에게 전달한다. 

2. IoC(Inversion of Control)

컨테이너가 코드 대신 오브젝트의 제어권을 갖고 있어, IoC(제어의 역전)이라고 한다.

예를 들어, 서블릿 클래스는 개발자가 만들지만, 그 서블릿의 메소드를 알맞게 호출하는 것은 WAS이다. 이렇게 개발자가 만든 어떤 클래스나 메소드를 다른 프로그램이 대신 실행해주는 것을 제어의 역전이라고 한다.

 

3. DI(Dependency Injection)

  • DI는 의존성 주입이라는 뜻을 가지고 있으며, 클래스 사이의 의존 관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말합니다.
  • DI가 적용 안된 예 (개발자가 직업 인스턴스를 생성)
class 엔진 {

}

class 자동차 {
     엔진 v5 = new 엔진();
}
  • Spring에서 DI가 적용 된 예 (컨테이너가 v5 변수에 인스턴스를 할당해줌)
@Component
class 엔진 {

}

@Component
class 자동차 {
     @Autowired
     엔진 v5;
}

 

Spring에서 제공하는 IoC/DI 컨테이너

  • BeanFactory : IoC/DI에 대한 기본 기능을 가지고 있음
  • ApplicationContext : BeanFactory의 모든 기능을 포함하며, 일반적으로 BeanFactory보다 추천된다. 트랜잭션 처리, AOP에 대한 처리를 할 수 있다. BeanPostProcessor, BeanFactoryPostProcessor 등을 자동으로 등록하고, 국제화 처리, 어플리케이션 이벤트 등을 처리할 수 있다.
  • BeanPostProcessor : 컨테이너의 기본 로직을 오버라이딩하여 인스턴스화와 의존성 처리 로직 등을 개발자가 원하는 대로 구현할 수 있도록 한다.
  • BeanFactoryPostProcessor : 설정된 메타 데이터를 커스터마이징 할 수 있다.

참조 URL

  • https://www.edwith.org/boostcourse-web/lecture/20656/

 

 

'Java > Spring' 카테고리의 다른 글

DispatcherServlet, MVC 설정  (0) 2020.07.14
Spring JDBC  (0) 2020.07.12
Spring Framework란?  (0) 2020.07.11
pom.xml  (0) 2020.07.11
Maven이란?  (0) 2020.07.10
    'Java/Spring' 카테고리의 다른 글
    • DispatcherServlet, MVC 설정
    • Spring JDBC
    • Spring Framework란?
    • pom.xml
    길민호(ethan.mino)
    길민호(ethan.mino)
    💻 호기심 많은 서버 개발자 길민호입니다.

    티스토리툴바