Spring Framework(138)
-
The Advisor API in Spring
Spring에서 Advisor는 포인트컷 표현식과 연관된 단일 어드바이스 객체만을 포함하는 애스펙트입니다.도입(introductions)의 특별한 경우를 제외하고, 모든 어드바이저는 모든 어드바이스와 함께 사용할 수 있습니다. org.springframework.aop.support.DefaultPointcutAdvisor는 가장 일반적으로 사용되는 어드바이저 클래스입니다. 이 클래스는 `MethodInterceptor, BeforeAdvice, 또는 ThrowsAdvice와 함께 사용할 수 있습니다.Spring에서는 동일한 AOP 프록시에서 어드바이저와 어드바이스 타입을 혼합할 수 있습니다. 예를 들어, 하나의 프록시 구성에서 인터셉션 around 어드바이스, throws 어드바이스, 그리고 befor..
2024.11.17 -
Advice API in Spring
Spring AOP에서 어드바이스(Advice)를 다루는 방법을 살펴보겠습니다.Advice Lifecycles각 어드바이스는 Spring 빈(bean)입니다. 어드바이스 인스턴스는 모든 타겟 객체에 공유될 수 있으며, 각 타겟 객체에 고유하게 존재할 수도 있습니다. 이는 클래스별 혹은 인스턴스별 어드바이스에 해당합니다.클래스별 어드바이스는 일반적으로 사용됩니다. 이는 프록시 객체의 상태에 의존하지 않거나 새로운 상태를 추가하지 않는 트랜잭션 어드바이저와 같은 일반적인 어드바이스에 적합합니다. 이러한 어드바이스는 메서드와 아규먼트에 대해 작동합니다.인스턴스별 어드바이스는 믹스인을 지원하기 위해 사용됩니다. 이 경우 어드바이스는 프록시 객체에 상태를 추가합니다.동일한 AOP 프록시에서 공유 어드바이스와 인스..
2024.11.17 -
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