문제

Spring AOP는 보안, 로깅, 거래 등과 같은 응용 프로그램 특정 작업에 가장 잘 사용된다는 인상을받습니다. 사용자 정의 Java5 주석을 프레임 워크로 사용하므로 프레임 워크로 사용됩니다. 그러나 Sagne는 더 친근한 디자인 패턴 인 것 같습니다.

스프링 애플리케이션에서 Spring AOP 대 AnspectJ를 사용하는 다양한 장단점을 강조 할 수 있습니까?

도움이 되었습니까?

해결책

Spring-Aop Pros

  • LTW를 사용할 필요가 없기 때문에 SAGONT보다 사용하는 것이 더 간단합니다 (로드 타임 직조) 또는 SAGONTJ 컴파일러.

  • 프록시 패턴과 데코레이터 패턴을 사용합니다

Spring-Aop 단점

  • 이것은 프록시 기반 AOP이므로 기본적으로 메소드-실행 조인트 포인트 만 사용할 수 있습니다.
  • 같은 클래스 내에서 다른 방법을 호출 할 때는 측면이 적용되지 않습니다.
  • 약간의 런타임 오버 헤드가있을 수 있습니다.
  • Spring-Aop은 Spring Factory에서 만들지 않은 것에 측면을 추가 할 수 없습니다.

SAGONJ PRO

  • 이는 모든 동창회를 지원합니다. 이것은 당신이 무엇이든 할 수 있음을 의미합니다.
  • Spring AOP보다 런타임 오버 헤드가 적습니다.

종자 단점

  • 조심하세요. 당신의 측면이 당신이 직조하고 싶은 것만으로 짜여져 있는지 확인하십시오.
  • Sagne Compiler를 사용하여 추가 빌드 프로세스가 필요하거나 LTW (로드 타임 직조)를 설정해야합니다.

다른 팁

다른 사람들이 언급 한 것 외에도 - 단지 다시 표현하기 위해 there are two major differences:

  1. 하나는 직조 유형과 관련이 있습니다.
  2. 다른 하나는 JoinPoint 정의입니다.

Spring-Aop : 개념을 사용하여 프록시를 통한 런타임 dynamic proxy if interface exists or cglib library if direct implementation provided.

AspectJ : 시간을 짜는 시간을 컴파일합니다 AspectJ Java Tools(ajc compiler) 소스를 사용할 수있는 경우 또는 컴파일 직조 (컴파일 된 파일 사용). 또한 스프링으로 직조 시간을 활성화 할 수 있습니다. aspectj 정의 파일과 유연성을 제공합니다.

컴파일 시간 직조는 성능의 이점 (경우에 따라)과 joinpoint definition in Spring-aop is restricted to method definition only which is not the case for AspectJ.

스프링 사용자 매뉴얼 말의 입에서 바로 많은 정보를 줄 것입니다.

6.4- 사용할 AOP 선언 스타일 선택 두 가지의 장단점을 논의하기 때문에 당신을 위해 죽었습니다.

단락 6.1.2- 스프링 AOP 성능 및 목표 & 챕터 6.2- @aspect 지원 그리고 6.8- 스프링 애플리케이션과 함께 SPIPHJ를 사용합니다 특히 흥미로워 야합니다.

추가 메모 : 높은 부하의 성능이 중요하다면 Spring AOP보다 9-35 배 빠른 SAGON을 원할 것입니다.. 10NS 대 355NS는별로 들리지 않을 수도 있지만 많은 측면을 사용하는 사람들을 보았습니다. 10K의 가치 측면. 이 경우 귀하의 요청이 수천 가지 측면에 도달 할 수 있습니다. 이 경우 해당 요청에 MS를 추가합니다.

참조 벤치 마크.

Spring AOP는 스프링 프레임 워크의 필수 부분 중 하나입니다. 매우 기본적인 단계에서 스프링 프레임 워크는 IOC 및 AOP를 기반으로합니다. 봄의 공식 코스에는 다음과 같은 슬라이드가 있습니다.

AOP는 프레임 워크에서 가장 중요한 부분 중 하나입니다.

Spring에서 AOP가 어떻게 작동하는지 이해하기위한 핵심 요점은 Spring과 함께 측면을 작성할 때 우리는 객체에 대한 프록시를 구축하는 프레임 워크를 JDKDynamicProxy Bean이 인터페이스를 구현하지 않으면 Bean이 인터페이스를 구현하거나 CGLIB를 통해 구현하는 경우. 버전 3.2 전에 스프링을 사용하는 경우 클래스 경로에 cglib 2.2가 있어야합니다. 봄 3.2부터 CGLIB 2.2가 코어에 포함 되었기 때문에 쓸모가 없습니다.

Bean Creation의 프레임 워크는 객체를 감싸고 보안, 거래 관리, 로깅 등과 같은 교차 절단 문제를 추가하는 프록시를 만듭니다.

이러한 방식으로 프록시 생성은 프레임과 방법을 프록시로 결정하기위한 프레임 워크를 기기로 표현하기 시작하는 데 적용됩니다. 조언은 코드보다 더 많은 책임이 될 것입니다. 이 과정에서 포인트 컷은 최종으로 선언되지 않은 공개 방법 만 캡처합니다.

이제 Spring Aop에서는 컨테이너 스타트 업에서 컨테이너에 의해 측면 직조가 수행됩니다. Sagej에서는 Bytecode 수정을 통해 코드의 사후 컴파일로이를 수행해야합니다. 이런 이유로 제 생각에는 스프링 접근 방식이 SageJ보다 간단하고 관리하기 쉽습니다.

반면, Spring AOP를 사용하면 구현이 코드 수정이 아니라 프록시를 통해 수행되므로 AOP의 모든 전력을 사용할 수 없습니다.

SpringAop에서로드 타임 직조를 사용할 수 있습니다. 이 기능의 혜택을 누릴 수 있습니다. @EnabledLoadWeaving 또는 XML에서. 이름 공간을 예로 사용할 수 있습니다. 그러나 Spring AOP에서는 모든 경우를 가로 채울 수 없습니다. 예를 들어, new Spring AOP에서는 명령이 지원되지 않습니다.

그러나 스프링 AOP에서는 aspectof 스프링 구성 Bean의 공장 방법.

Spring AOP가 기본적으로 컨테이너에서 생성 된 프록시이므로 Spring Bean에만 AOP를 사용할 수 있습니다. Species를 사용하면 모든 콩에서 측면을 사용할 수 있습니다. 또 다른 비교 지점은 디버그와 코드 동작의 예측 가능성입니다. Spring AOP를 사용하면 작업이 Java 컴파일러에서 모두 미리 형성되며 측면은 스프링 콩을위한 프록시를 만드는 매우 멋진 방법입니다. AnspectJ에서 코드를 수정하면 더 많은 컴파일이 필요하며 측면이 어디에 짜여져 있는지 이해하려면 어려울 수 있습니다. 봄에 직조를 종료하더라도 간단합니다. 스프링을 사용하면 구성에서 측면을 제거하고 다시 시작하면 작동합니다. SAGONT에서 코드를 다시 컴파일해야합니다!

로드 타임 직조에서 Spring은 Spring의 모든 옵션을 지원하지 않기 때문에 Spring보다 유연합니다. 그러나 콩의 생성 과정을 변경하려면 내 생각에, 더 좋은 방법은 공장에서 사용자 정의 로그인을 관리하는 것이며 새 운영자의 동작을 변화시키는 측면의로드 타임 직조가 아닌 공장에서 사용자 정의 로그인을 관리하는 것입니다.

SpectJ와 Spring AOP 의이 파노라마가 두 물약의 차이를 이해하는 데 도움이되기를 바랍니다.

귀하의 측면이 미션 크리티컬이 될지 여부와 코드가 배포되는 위치를 고려하는 것이 중요합니다. Spring AOP는로드 타임 직조에 의존하고 있음을 의미합니다. 이것은 직조에 실패 할 수 있으며 내 경험에 따라 로그인 오류가 존재할 수 있지만 종횡비없이 응용 프로그램이 실행되는 것을 방해하지는 않습니다. 나는 이것이 사실이 아닌 방식으로 구성 할 수 있다는 경고를 추가 할 것이다. 그러나 나는 개인적으로 그것을 알고 있지 않습니다]. 컴파일 타임 직조는 이것을 피합니다.

또한, SAGON-MAVEN-PLUGIN과 함께 SAGSTJ를 사용하는 경우 CI 환경에서 측면에 대해 단위 테스트를 실행할 수 있으며 구축 된 아티팩트가 테스트되고 올바르게 짜여져 있다는 확신을 갖습니다. Spring Driven Unit 테스트를 확실히 작성할 수는 있지만 LTW가 실패하면 배포 된 코드가 테스트 된 코드임을 여전히 보장 할 수 없습니다.

또 다른 고려 사항은 서버 / 애플리케이션 시작의 성공 또는 실패를 직접 모니터링 할 수있는 환경에서 응용 프로그램을 호스팅하는지 또는 귀하의 감독하에 있지 않은 환경에서 응용 프로그램이 배포되는지 여부입니다. 클라이언트가 호스팅합니다]. 다시 말하지만, 이것은 시간 직조를 컴파일하는 방법을 가리 킵니다.

5 년 전, 나는 Spring을 훨씬 더 찬성하여 AOP를 구성하기가 더 쉬웠고 내 IDE를 씹을 가능성이 적기 때문에 AOP를 구성했습니다. 그러나 컴퓨팅 성능과 가용 메모리가 증가함에 따라 이것은 문제가 훨씬 적었고, 측면 J-Maven-Plugin과 함께 CTW는 위에서 설명한 이유에 따라 작업 환경에서 더 나은 선택이되었습니다.

이것 기사 또한 주제에 대한 좋은 설명이 있습니다.

Spring Aop 및 Sagne는 목표가 다릅니다.

Spring AOP는 스프링 IOC 전역에서 간단한 AOP 구현을 제공하여 프로그래머가 직면 한 가장 일반적인 문제를 해결하는 것을 목표로합니다.

반면, SaterJ는 완전한 AOP 솔루션을 제공하는 원래 AOP 기술입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top