AspectJ vs Dynamic Proxy

2023. 2. 12. 16:16카테고리 없음

AOP를 공부하던중 문득  스프링의 AOP와 AOP를 구현한 자바객체에 대해서 어떤 차이점이 있는지 궁금해졌다.

 

 

AOP 란?

 

어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 모듈화 하겠다는의미이다.

 

 

AOP구현 방법

 

우선 AOP를 구현 할수 있는 방법은 다양하게 있다.

 

AspectJ

 

-컴파일

J.java -> J.class라고  컴파일 할 시점에 해당하는 Aspect를 끼워 넣어주는 방법 이있다.

 

-클래스 로드시 

J,class를 클래스 로더가 클래스에 올릴때  그대 aop를 적용시킨다.

 

(여기서 의문이 어노테이션을 이용해서 그냥 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야 하는지 알려주기 위한 추가 정보로 사용하는지 아니면 리플랙션을 사용하는 것인지 리플랙션을 사용하게 되면 리플랙션은 런타임에 작동이 되니까 이것은 클래스 로드시가 아니라 런타임시가 되는 것이 아닌가)

 

어노테이션 : 주석 , 컴파일처리시 알려준다 ( 추가한다)

 

리플랙션: 런타임시에 클래스를 동적으로 가져올 수 있다.

 

 

장점 : 자바 코드에서 동작하는 모든 객체에 대해  완벽한 aop 솔루션 제공, 오브젝트의 생성,필드 값 조회 및 조작, 스태틱

초기화 등 다양한 작업게 부가기능을 추가 할 수있다.

 

 

프록시 패턴 (스프링 aop가 사용하는 방법)

 

가장 큰 차이는 프록시를 사용한다는 것이다 . 프록시라는 것은 대리로 di( 의존의 역전) 을 통해서 같은 인터페이스를 상속 받고있는 객체가 호출되기전에  먼저 프록시(자신) 이 호출을 대신 받고 처리를 하는데 그때에 aop 부가기능을 추가해서 

넣어 줄 수있다.   한번더 감싼다라는 부분이 AspectJ와의 차이점이 되겠다.

spring 컨테이너가 관리하는 Bean에만 사용하려고 만들었기에 여기에다가만 aop를 적용 할수 있다.

 

 

 

 

 

자바 AOP의 모든 것(Spring AOP & AspectJ) (tistory.com)

 

 

AOP(Aspect Oriented Programming) (oopy.io)