[Spring] SpringMVC DI~AOP
스프링 프레임워크
기업형 응용 프로그램을 보조하기 위한 쉬운 프레임워크
Spring : 분산형, 기업형 응용 프로그램, 개발을 위한 API, 결합력을 낮추는 DI, DB Transaction 처리, 로그처리
코드 수정 없애고 DI를 위한 설정
- 어떤 객체를 수정해야 한다면?
왼쪽은 클래스 a를 정의하면서 B라는 클래스를 이용한다. 객체화 해서 이용하고 있다.
A라고하는 녀석 B라는 녀석 쓰기 위해 자기가 생성해서 사용중이다.
이걸 A가 B를 일체형으로 가졌다고 해서 has a 관계라고 한다.
B를 A의 부품이라 인식하면 되는데 이걸 Dependency라 한다. 종속성 이런걸 쉽게 보면 부품이라 보면된다.
직접 갖게되는 프라이빗하게 쓰는 게 있으, 오른쪽은 직접 생성하지 않는다. 외부에서 생성해서 세팅해서 그걸 사용하는 방식도 가능하다.
왼쪽은 일체형, 오른쪽은 조립형으로 쓴다.
스프링에서는 DI가 중요한 이유는
여기서 위는 일체형, 아래는 조립형이다.
일체형 보다 조립형이 결합력이 낮아지고 부품을 쉽게 갈아끼우는게 쉽다.
느슨한 결합으로 조립형을 바꾸는 게 좋다.
A입장에선 B가 부품인데 이걸 꽂아줘야 한다.
부품인 B를 다른 말로 Dependecy라 한다면 그 Dependecy를 꽂는 작업을 injection이라 한다.
이걸 조립형으로 쓰는데 있어서 어떻게 쓰고 장단점이 무엇인지 아는게 중요하다.
장점은 부품을 쉽게 바꿀수 있는거고 단점은 부품을 직접 조립하는게 단점이다.
세터를 통해서 주입, 생성자를 통해서 주입하는 방법이 있다.
이 조립이 불편하면 이 조립하는 서비스를 받는게 있는데 DI를 해주는 게있으면 좋은데 그게 스프링이다. 저 빨간 부분을 스프링이 해줄 수 있다.
요청하기 위해 주문서를 작성하는 거 마냥 스프링에서도 주문서 역할을 하는게 필요하다. 그게 XML과 annotation이 그 역할을 한다.
컨테이너는 주문서대로 박스에 담을 텐데 마찬가지로 스프링도 주문서에 입력된걸 담을 수 있는 그릇이 필요하다.
부품컨테이너를 Dependecy 컨테이너라 해도 되지만 IOC 컨테이너라 한다. (IOC가 DI의 상위 개념)
그 이유는 조립 법을 보면 알수 있다.
제일 먼저 만들어 지는건 작은 부품 만들어지고 큰부품 만들어지는 순서로 간다.
부품 조립이라는 과정 거치는 건 이런식으로 간다.
위는 일체형으로 제품 만드는 경우 A가 B라는 객체 만들고 B가 C라는 객체 만들고 이 안쪽을 그 전이 모름. A 만드니까 B만들어지고 C만들어지
근데 결합형은 D가 제일먼저 만들어진다. 그리고 역순으로 만들어진다.
결합을 하게되면 역순으로 만들어진다(Inversion of Control)
이 조립에 대한 순서가 역순에 대한 순서로 올라간다.
이 컨테이너가 IOC컨테이너고 단순하게 부품을 담고있으면 Dependecy Container라 했을텐데 부품이 결합까지 해서 담겨져서 IOC컨테이너라 부른다.
그럼 이 컨테이너에 내가 원하게 조립하고 작성하도록 만들 필요가 있다.
Spring IOC 컨테이너 이용하기
- 작성한 지시서 읽어서 만들고 활용
- Application Context: 스프링에서 DI(지시서)읽어서 조립해주는 구체적 객체 이름은 APplicationCOntext고 이건 인터페이스고 이걸 구현하는게 여러개 있는데 다양하게 있따.
차이점은 지시서 넘길떄 어떻게 넘기냐에 따라 좀 달라진다.
이 중 classPathXML 쓰는게 가장 보편적
Spring DI활용하기 - 이론
- 빈(Beans)
JavaBeans - 재사용 가능한 컴포넌트 , 상태 Servlet & JSP beans - MVC의 모델, EL, scope, JSP 컨테이너가 관리
EJB enterprise Java Beans - 복잡한 규칙, EJB 컨테이너가 관리 Spring Bean - POJO (Plain old java object). 단순 독립적 Spring container가 관리
- BeanFactory 와 ApplicationContext
Bean - SpringContainer가 관리하는 객체
Spring container- Bean 저장소, Bean을 저장(생성,소멸, 연결)
- 1.BeanFactory : 빈을 생성, 연결등의 기본 기능을 정의
- 2.ApplicationContext : 빈 팩토리를 확장해서 여러 기능을 정의
ApplicationContext 의 종류
Root Ac와 Servlet AC
톰캣 서버 구조 톰캣 엔진 안에 호스트 별로 영역이 있고 그 안에 모듈별로 컨텍스트가 있다.
Context를 감싸고 있는게 ApplicationContext라 생각하면 된다.