Ioc의 등장
: 스프링이 다른 프레임워크와 가장 큰 차이점
AOP
: AOP를 사용하여, 로깅, 트랜잭션 관리, 시큐리티에서의 적용 등 AspectJ와 같이 완벽하게 구현된 AOP와 통합하여 사용 가능하다.
IOC (Inversion of Control : 제어의 역전
- 인스턴스 등의 생성 주기 같은 것들이 개발자가 관리하는 것이 아니라 스프링 컨테이너에게 모두 맡기게 되는데 이게 제어가 넘어갔다고 하여 제어의 역전이라 한다.
의존성 주입(DI : Dependency Injection)
[장점]
- 의존성으로부터 격리시켜 코드 테스트에 용이하다.
- DI를 통하여, 불가능한 상황을 Mock과 같은 기술을 통해 안정적으로 테스트가 가능하다.
- 코드를 확장하거나 변경할 때 영향성을 최소화한다.(추상성)
- 순환 참조를 막을 수 있다.
[방법]
- 생성자를 이용
- Field변수를 이용
- setter를 이용
@Bean, @Component,
@Bean
: 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다.
또한, class에 사용이 불가능하다.@Component
: 직접 컨트롤이 가능한 Class들의 경우에 사용된다.
: 개발자가 직접 작성한 클래스를 Bean으로 등록하고자 할 경우 사용된다.
: @Controller, @Service, @Repository 등의 어노테이션에서 상속@Configuration
: 외부라이브러리 또는 내장 클래스를 Bean으로 등록하고자 할 경우 사용한다.(개발자가 직접 제어가 불가능한 클래스)
: 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시@Configuration을 사용해야 한다.
즉, 해당 클래스에서 한 개 이상의 Bean을 생성하고 있을때 선언 해주어야 함
관점지향 프로그램(AOP : Aspect Oriented Programming)
스프링 어플리케이션은 대부분 특별한 경우를 제외하고는 MVC 패턴
Web Layer, Business Layer, Data Layer로 나뉜다.주요 Annotation
- Aspect : 자바에서 널리 사용하는 AOP 프레임워크에 포함되며, AOP를 정의하는 Class에 할당
- Poincut : 기능을 어디에 적용시킬지, 메소드? Annotation? 등 AOP를 적용시킬 지점을 설정
- Before : 메소드 실해하기 이전
- After : 메소드가 성공적으로 실행 후, 예외가 발생 되더라도 실행
- AfterReturing : 메소드 호출 성공 실행시(Not Throws)
- AfterThrowing : 메소드 호출 실패 예외 발생(Throws)
- Around : Before / After 모두 제어
[사용예시]
[1]. Dependency 추가
[2]. AOP 클래스 추가
[3]. PointCut, Before, AfterReturning 메서드 정의