5.2 Spring AOP 기능 및 목표 by ys

Spring AOP는 순수 Java로 구현된다. 특별한 컴파일 과정이 필요 없습니다. Spring AOP는 클래스 로더 계층을 제어 할 필요가 없으므로 서블릿 컨테이너 또는 애플리케이션 서버에서 사용하기에 적합합니다.

Spring AOP는 현재 메소드 실행 join point만을 지원한다. (Spring bean에서 메소드의 실행을 advice한다.) 필드 차단은 구현되지 않았지만 필드 차단에 대한 지원은 핵심 Spring AOP API를 손상시키지 않고 추가 될 수 있습니다. 필드 액세스를 조언하고 조인 포인트를 업데이트해야하는 경우 AspectJ와 같은 언어를 고려하십시오.

AspectJ는 PARC에서 개발한 자바 프로그래밍 언어용 관점 지향 프로그래밍 (AOP) 확장 기능이다. 이클립스 재단 오픈 소스 프로젝트에서 독립형 또는 이클립스로 통합하여 이용 가능하다. AspectJ는 최종 사용자를 위한 단순함과 이용성을 강조함으로써 폭넓게 사용되는 AOP에 대한 디 팩터 표준(사실 상 표준)이 되었다.

AspectJ란 순수 Spring AOP API에서 제공하지 않는 필드에 대한 Advisor를 지원하고, CTW, LTW과 같은 다양한 위빙 방법을이용할 수 있는 기능을 제공하여 프로그램의 퍼포먼스를 향상 시킬 수 있도록 해준다. 또한 @Aspect 어노테이션을 바탕으로 Aspect 로직을 작성 할 수 있어 기존의 xml방식보다는 더 편리하다. 현재는 Spring AOP + AspectJ는 거의 표준이라고 할 정도로 많이 사용이 되고 있는 추세다. AspectJ는 스프링 뿐만 아니라 AOP를 지원하지 않는 프레임 워크에서도 AOP를 지원할 수 있도록 도움을 주는 API이다.

AOP에 대한 Spring AOP의 접근 방식은 다른 대부분의 AOP 프레임 워크와 다르다. 목표는 가장 완벽한 AOP 구현을 제공하는 것이 아닙니다 (Spring AOP는 꽤 유능한 것이지만). 오히려 AOP 구현과 Spring IoC 간의 긴밀한 통합을 제공하여 엔터프라이즈 애플리케이션의 일반적인 문제를 해결하는 것을 목표로합니다.

따라서, 예를 들어 Spring Framework의 AOP 기능은 일반적으로 Spring IoC 컨테이너와 함께 사용된다. Aspects는 일반적인 bean 정의 구문을 사용하여 구성됩니다 (강력한 "auto-proxying"기능이 가능함). 이것은 다른 AOP 구현과의 중요한 차이입니다. 매우 정교한 객체 (일반적으로 도메인 객체)에 대한 advice과 같이 Spring AOP를 사용하여 쉽고 효율적으로 수행 할 수없는 작업이 있습니다. 그런 경우에는 AspectJ가 최선의 선택이다. 그러나 Spring AOP는 AOP를 따르는 엔터프라이즈 Java 애플리케이션의 대부분의 문제에 대해 우수한 솔루션을 제공한다는 것이 우리의 경험입니다.

Spring AOP는 포괄적 인 AOP 솔루션을 제공하기 위해 AspectJ와 경쟁하려고 결코 노력하지 않는다. 우리는 Spring AOP와 같은 프록시 기반 프레임 워크와 AspectJ와 같은 본격적인 프레임 워크 모두가 가치 있고 경쟁보다는 보완적인 것이라고 믿는다. Spring은 Spring AOP와 IoC를 AspectJ와 완벽하게 통합하여 일관된 Spring 기반 애플리케이션 아키텍처 내에서 AOP의 모든 사용을 가능하게한다. 이 통합은 Spring AOP API 또는 AOP Alliance API에 영향을 미치지 않습니다. Spring AOP는 하위 호환성을 유지합니다. Spring AOP API에 대한 설명은 다음 장 을 참조하십시오 .

Spring Framework의 핵심 신조 중 하나는 비 침습성입니다. 이것은 비즈니스 또는 도메인 모델에 프레임 워크 특정 클래스 및 인터페이스를 강제로 적용해서는 안됩니다. 그러나 어떤 곳에서는 Spring Framework가 Spring Framework 관련 종속성을 코드베이스에 도입 할 수있는 옵션을 제공합니다. 이러한 옵션을 제공하는 이유는 특정 시나리오에서 특정 방식의 기능을 그렇게 쉽게 읽거나 코드화하기가 쉽기 때문입니다. 그러나 Spring Framework (거의)는 항상 선택권을 제공합니다. 특정 유스 케이스 나 시나리오에 가장 적합한 옵션을 자유롭게 결정할 수 있습니다.

이 장과 관련된 하나의 선택은 AOP 프레임 워크 (그리고 AOP 스타일)를 선택하는 것입니다. AspectJ, Spring AOP 또는 둘 다를 선택할 수있다. 또한 @AspectJ 주석 스타일 방식이나 Spring XML 구성 스타일 방식 중 하나를 선택할 수있다. 이 장에서 @AspectJ 스타일의 접근 방식을 처음으로 도입한다는 사실은 Spring 팀이 Spring XML 설정 스타일보다 @AspectJ 주석 스타일 방식을 선호한다는 표시로 받아 들여서는 안된다.

각 스타일의 "whys 및 wherefores"에 대한 더 자세한 설명은 AOP 선언 스타일 선택을 참조하십시오 .

Last updated