-
Spring IoC/DIJava & 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
반응형'Java & Spring > 기본 개념 정리' 카테고리의 다른 글
HandlerMethodArgumentResolver (0) 2021.07.13 Spring boot actuator (0) 2021.07.13 xml 설정과 Java Config 설정 (2) 2021.04.09 -