<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
<scope>runtime</scope>
</dependency>
@transactional 할려고
선언적프로그램
pop 절차를 지향하는 프로그램
fop 함수지향
oop 객체 지향
aop 관점지향 프로그래밍 / 람다식 (전역함수..x) 서로간의 결합력이 없음
절차에서 가장 중요한건 순서
네가지의 공통점은
aop
-관심사 분리 관점 분리!!!
target과 advice로 weaping 해야함
어떤 advice를 어떤 weaping으로해야할지 target을 해야함
– Target
• Target 객체는 Advice를 받는 객체이다. 핵심 비즈니스 로직이 있는 객체라고 생각하면 된다.
– Weaving
• Weaving은 Aspect를 Target 객체에 적용하여 새로운 프록시 객체를 생성하는 과정이다. Weaving은 다음과
같이 구분된다.
1. 컴파일 시 엮기: 별도 컴파일러를 통해 핵심 관심사 모듈의 사이 사이에 관점(Aspect) 형태로 만들어진 횡
단 관심사 코드들이 삽입되어 관점(Aspect)이 적용된 최종 바이너리가 만들어지는 방식이다. (ex. AspectJ,
AspectWerkz, …)
2. 클래스 로딩 시 엮기: 별도의 Agent를 이용하여 JVM이 클래스를 로딩할 때 해당 클래스의 바이너리 정보
를 변경한다. 즉, Agent가 횡단 관심사 코드가 삽입된 바이너리 코드를 제공함으로써 AOP를 지원하게 된
다. (ex. AspectJ, AspectWerkz, …)
3. 런타임 엮기: 소스 코드나 바이너리 파일의 변경 없이 프록시를 이용하여 AOP를 지원하는 방식이다. 프
록시를 통해 핵심 관심사를 구현한 객체에 접근하게 되는데, 프록시는 핵심 관심사 실행 전후에 횡단 관
심사를 실행한다. 따라서 프록시 기반의 런타임 엮기의 경우
– Advice
• Advice는 Aspect의 실제 구현체로 Joinpoint에 삽입되어 동작할 수 있는 코드이다. Advice는 Joinpoint와 결
합하여 동작하는 시점에 따라 before advice, after advice, around advice 타입으로 구분된다.
1. Before advice: joinpoint 전에 수행되는 advice
2. After returning advice: joinpoint가 성공적으로 리턴된 후에 동작하는 advice
3. After throwing advice: 예외가 발생하여 joinpoint가 빠져나갈때 수행되는 advice
4. After (finally) advice: join point를 빠져나가는(정상적이거나 예외적인 반환) 방법에 상관없이 수행되는
advice
5. Around advice: joinpoint 전, 후에 수행되는 advice
분리되어잇는 관심사에따라 타겟과 어드바이스 개발
포인트컷에의해 선택된 타겟을 어드바이스 랑 weaving함 ( 결합)
근데 결합 시점이 필요함 ( 언제 결합 언제 위빙 어디에서 결합할건지도 필요)
결합할 시점과 시간을 joinpoint라고 한다.
컴파일할때 join 실핼할때 join
스프링은 실행시점에 joinpoint를 제공
어스펙트 : 어드바이스+ 포인트컷
프레임이 사용하고있는 어드바이스를 어드바이저라고 한다.
관심사 : 타겟
부가관심사 : 어드바이스
트랜잭션관리를하기위해서는 advisor를 만들어야함 / spring안에있는 advice를 advisor랑함
target과 advice는 같은 컨테이너 안에서 동작해야함
상위 xml이 되는이유는 serivce가 상위컨테이너이기 때문에 .
비식별 1: n