#aop
글
-
Spring 소스 파헤치기 10: AOP 프록시는 어떻게 만들어지나 — JDK 방식과 CGLIB 방식
ProxyFactory.getProxy() 한 줄이 JDK 동적 프록시와 CGLIB 프록시 가운데 무엇을 어떤 기준으로 고르고, 각각 어떻게 만들며, 프록시로 들어온 호출이 인터셉터 체인을 지나 대상 객체까지 어떻게 가는지 실제 소스에서 확인합니다. 자기 자신의 메서드를 안에서 부르면 어드바이스가 걸리지 않는 이유와 final 메서드의 함정도 예제로 봅니다.
-
Spring 소스 파헤치기 11: @Aspect는 어떻게 발견되고 어드바이스 체인은 어떻게 돌아가나
@EnableAspectJAutoProxy 한 줄이 컨테이너에 무엇을 등록하는지, @Aspect 클래스가 어떻게 어드바이저로 바뀌는지, 컨테이너는 어떤 빈을 프록시로 감쌀지 어떻게 정하는지, 그리고 프록시의 메서드를 부르면 @Around·@Before·@After·@AfterReturning·@AfterThrowing이 어떤 순서로 실행되는지를 실제 소스와 예제 출력으로 확인합니다.
-
Spring 소스 파헤치기 17: @Transactional — 트랜잭션은 누가 열고 누가 닫나
메서드에 @Transactional 한 줄을 붙이면 누가 트랜잭션을 열고, 예외가 나면 누가 롤백하고, 정상이면 누가 커밋하는지 실제 소스로 따라갑니다. PlatformTransactionManager·TransactionDefinition·TransactionStatus 세 인터페이스, @EnableTransactionManagement가 등록하는 빈, TransactionInterceptor가 호출을 가로채는 순서, 전파 속성이 갈리는 자리, 커넥션이 ThreadLocal에 묶이는 이유, 그리고 체크 예외는 롤백되지 않는다·안쪽이 실패하면 바깥이 UnexpectedRollbackException을 받는다 같은 함정을 예제로 확인합니다.