분류 전체보기(359)
-
Choosing which AOP Declaration Style to Use
특정 요구 사항을 구현하기 위해 애스펙트가 최선의 접근 방식이라고 결정했다면, Spring AOP와 AspectJ 중 무엇을 사용할지, 그리고 Aspect 언어(코드) 스타일, @AspectJ 애너테이션 스타일, Spring XML 스타일 중 어떤 것을 사용할지 결정해야 합니다. 이러한 결정은 애플리케이션 요구 사항, 개발 도구, 팀의 AOP에 대한 친숙도 등 여러 요인에 영향을 받습니다.Spring AOP 또는 Full AspectJ?가장 간단하게 작동할 수 있는 것을 사용하세요. Spring AOP는 Full AspectJ를 사용하는 것보다 간단합니다. 개발 및 빌드 프로세스에 AspectJ 컴파일러/위버를 도입할 필요가 없기 때문입니다. Spring 빈의 작업 실행에만 조언(advice)을 적용해야..
2024.11.17 -
Proxying Mechanisms
Proxying MechanismsSpring AOP는 지정된 타겟 객체에 대해 JDK 동적 프록시 또는 CGLIB을 사용하여 프록시를 생성합니다. JDK 동적 프록시는 JDK에 내장되어 있는 반면, CGLIB은 일반적인 오픈 소스 클래스 정의 라이브러리로, Spring Core에 재패키징되어 있습니다.프록시 대상 객체가 하나 이상의 인터페이스를 구현하는 경우 JDK 동적 프록시가 사용됩니다. 이때 타겟 타입이 구현하는 모든 인터페이스가 프록시됩니다. 반면, 타겟 객체가 인터페이스를 구현하지 않는 경우 CGLIB 프록시가 생성됩니다.모든 메서드(인터페이스에서 구현한 메서드뿐만 아니라 타겟 객체에 정의된 모든 메서드)를 프록시하려면 CGLIB 프록시를 강제로 사용하도록 설정할 수 있습니다. 그러나 다음과 ..
2024.11.17 -
Introductions
IntroductionsIntroductions(AspectJ에서는 inter-type declarations라고도 함)는 특정 aspect가 advised된 객체가 주어진 인터페이스를 구현하도록 선언하고, 그 객체들을 대신하여 해당 인터페이스의 구현을 제공할 수 있게 합니다.@DeclareParents 애노테이션을 사용하여 Introduction을 만들 수 있습니다. 이 애노테이션은 매칭되는 타입에 새로운 부모(즉, 새로운 인터페이스 구현)를 가지도록 선언하는 데 사용됩니다. 예를 들어, UsageTracked라는 인터페이스와 이 인터페이스를 구현한 DefaultUsageTracked라는 클래스가 있다고 가정해 보겠습니다. 다음의 aspect는 모든 서비스 인터페이스 구현체들이 UsageTracked ..
2024.11.17 -
Declaring a Pointcut
포인트컷은 관심 있는 조인 포인트를 결정하여 어드바이스가 실행될 시점을 제어할 수 있도록 합니다. Spring AOP는 Spring 빈에 대한 메서드 실행 조인 포인트만 지원하므로, 포인트컷은 Spring 빈의 메서드 실행을 매칭하는 것으로 생각할 수 있습니다. 포인트컷 선언은 이름과 파라미터를 포함하는 시그니처(signature)와 관심 있는 메서드 실행을 정확히 결정하는 포인트컷 표현식으로 구성됩니다. @AspectJ 애노테이션 스타일의 AOP에서는 포인트컷 시그니처가 일반 메서드 정의에 의해 제공되며, 포인트컷 표현식은 @Pointcut 애노테이션을 사용하여 표시됩니다(포인트컷 시그니처 역할을 하는 메서드는 void 반환 타입이어야 합니다).다음 예시는 포인트컷 시그니처와 포인트컷 표현식 간의 차이..
2024.11.17 -
Declaring an Aspect
@AspectJ 지원이 활성화된 상태에서, 애플리케이션 컨텍스트에 정의된 빈 중 클래스에 @Aspect 애노테이션이 있는 @AspectJ aspect은 Spring에 의해 자동으로 감지되며 Spring AOP를 구성하는 데 사용됩니다. 다음 두 가지 예시는 크게 유용하지 않은 aspect를 정의하는 데 필요한 최소 단계를 보여줍니다.첫 번째 예시에서는 애플리케이션 컨텍스트에 있는 일반적인 빈 정의가 @Aspect 애노테이션이 있는 빈 클래스를 가리키는 방법을 보여줍니다: 두 번째 예시에서는 @Aspect 애노테이션이 달린 NotVeryUsefulAspect 클래스 정의를 보여줍니다:package com.xyz;import org.aspectj.lang.annotation.Aspect;@Aspectp..
2024.11.17 -
Enabling @AspectJ Support
@AspectJ aspect를 기반으로 Spring AOP를 구성하고, 이 aspect에 의해 advice되는지 여부에 따라 빈을 auto-proxying하는 Spring 지원 기능을 활성화해야 합니다. auto-proxying는 Spring이 특정 빈이 하나 이상의 aspect에 의해 어드바이스된다고 판단할 경우, 해당 빈에 대해 메서드 호출을 가로채고 필요한 경우 어드바이스를 실행할 수 있도록 자동으로 프록시를 생성하는 것을 의미합니다.@AspectJ 지원은 XML 또는 Java 기반 구성으로 활성화할 수 있습니다. 두 경우 모두 애플리케이션의 클래스패스에 AspectJ의 aspectjweaver.jar 라이브러리(버전 1.9 이상)를 포함해야 합니다. 이 라이브러리는 AspectJ 배포판의 lib ..
2024.11.17