Spring DI Annotation
Bean 등록 Annotation
@Component | 객체(컴포넌트)를 나타내는 일반적인 타입으로 <bean> 태그와 동일한 역할 |
@Repository | 퍼시스턴스 레이어, 영속성을 가지는 속성(파일, 데이터베이스)을 가진 클래스 ex) Data Access Object Class |
@Service | 서비스 레이어, 비즈니스 로직을 가진 클래스 ex) Service Class |
@Controller | 프레젠테이션 레이어, 웹 어플리케이션에서 View에서 전달된 웹 요청과 응답을 처리하는 클래스 ex) Controller Class |
Bean 의존관계 주입 Annotation
@Autowired @Resource
- @Component로 의존관계를 설정한 객체로부터 의존 관계를 자동으로 주입해주는 어노테이션
@Autowired
- 정밀한 의존관계 주입이 필요한 경우에 유용
- @Autowired는 필드 변수, setter 메소드, 생성자, 일반 메소드에 적용 가능
- 의존하는 객체를 주입할 때 주로 Type을 이용
- @Autowired는 <property>, <constructor-arg>태그와 동일한 역할
* @Qaulifier : Autowired와 함께 쓰이며, 한 프로젝트 내에 @Autowired로 의존성을 주입하고자 하는 객체가 여러개 있을 경우, @Qualifier("name")를 통해 원하는 객체를 지정하여 주입할 수 있다.
@Resource
- 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용
- @Resource는 프로퍼티, setter메소드 적용 가능
- 의존하는 객체를 주입할 때 주로 Name을 이용
@Value
- 단순한 값을 주입할 때 사용되는 어노테이션
- @Value("Spring")은 <property .. value="Spring"/> 와 동일한 역할
<context:component-scan> 태그
- @Component를 통해 자동으로 Bean을 등록하고, @Autowired로 의존 관계를 주입 받는 어노테이션을 클래스에서 선언하여 사용했을 경우에는 해당 클래스가 위치한 특정 패키지를 Scan하기 위한 설정을 XML에 해주어야 한다.
<context:component-scan base-package="com.greedy.firstSpring"/>
* <context-include-filter> 태그와 <context:exclude-filter> 태그를 같이 사용하면 자동 스캔 대상에 포함시킬 클래스와 포함시키지 않을 클래스를 구체적으로 명시할 수 있다.
Spring AOP
관점 지향 프로그래밍 약자로 일반적으로 사용하는 클래스(Service, Dao 등)에서 중복되는 공통 코드 부분(commit, rollback, log처리)을 별도의 영역으로 분리하고, 소스 코드의 중복을 줄이며 필요할 때 마다 쓸 수 있게 객체화 하는 기술
Spring AOP의 구조
- 공통되는 부분을 따로 빼내어 작성하는 클래스를 Advice라고 하며, 해당 시점을 JoinPoint, 그리고 그 시점에 공통 코드를 끼워넣는 작업을 Weaving이라고 한다.
- 대상 객체에 Advice가 적용된 후 생성되는 객체는 Proxy 라고 한다.
- Advice를 삽입할 대상 객체는 Target Object
Aspect
부가기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용할지 결정하는
포인트컷(PointCut)을 합친 개념
Advice 용어 설명
Before Advice | JoinPoint 앞에서 실행 |
Aroudn Advice | JoinPoint 앞과 뒤에서 실행 |
After Advice | JoinPoint 호출이 리턴되기 직전에 실행 |
After Returning Advice | JoinPoint 메소드 호출이 정상적으로 종료된 후에 실행 |
After Throwing Advice | 예외가 발생했을 때 실행 |
Spring AOP 특징
1. Spring은 프록시(Proxy) 기반 AOP를 지원한다.
- Spring은 대상 객체(Target Object)에 대한 프록시를 만들어 제공하며 타겟을 감싸는 프록시는 서버 Runtime시에 생성된다.
- 이렇게 생성된 프록시는 대상 객체를 호출할 때 먼저 호출되어 어드바이스의 로직을 처리 후 대상 객체를 호출한다.
2. 프록시(Proxy)는 대상 객체의 호출을 가로챈다.
- 프록시는 역할에 따라 타겟 객체에 대한 호출을 가로챈 다음 어드바이스의 부가기능 로직을 수행하고 난 후,
타겟의 핵심 기능 로직을 호출하거나 (전처리 어드바이스) 타겟의 핵심기능 로직 메서드를 호출한 후에
부가기능(어드바이스)을 수행한다. (후처리 어드바이스)
3. Spring AOP는 메소드 조인 포인트만 지원한다.
Spring은 동적 프록시를 기반으로 AOP를 구현하기 때문에 메소드 조인 포인트만 지원한다.
'TIL > Spring' 카테고리의 다른 글
[Spring] Handler Method Parameter (0) | 2022.04.15 |
---|---|
[Spring] 개념 정리-1 (0) | 2022.04.12 |
[Spring] SpringIoC - Component Scan (excludeFilters, includeFilters) (0) | 2022.04.06 |
[Spring] Spring IoC(제어의 역행)-bean factory (0) | 2022.04.06 |