전체 글(575)
-
Aspect Instantiation Models, An AOP Example
Aspect Instantiation Models이 챕터는 고급 주제입니다. AOP를 처음 시작하는 경우, 나중에 이 내용을 안전하게 건너뛰어도 됩니다.디폴트로 각 aspect는 애플리케이션 컨텍스트 내에서 단일 인스턴스를 가집니다. AspectJ에서는 이를 싱글톤 인스턴스화 모델이라고 부릅니다. 하지만 다른 생명 주기를 가진 aspect를 정의하는 것도 가능합니다. Spring은 AspectJ의 perthis, pertarget, 및 pertypewithin 인스턴스화 모델을 지원하며, percflow 및 percflowbelow는 현재 지원하지 않습니다.@Aspect 애노테이션에서 perthis 절을 지정하여 perthis aspect를 선언할 수 있습니다. 다음은 그 예입니다:@Aspect("per..
2023.05.24 -
Declaring Advice
어드바이스는 포인트컷 표현식과 연관되어 있으며, 포인트컷에 의해 매칭된 메서드 실행 전, 후 또는 실행 중에 실행됩니다. 포인트컷 표현식은 inline pointcut 이거나 named pointcut을 참조할 수 있습니다. ※ inline pointcut 이란? 어드바이스 어노테이션(@Before)에 직접 포인트컷 표현식을 문자열로 작성한 것 @Before("execution(* com.example.service.OrderService.placeOrder(..))")public void beforePlacingOrder() { System.out.println("📌 [인라인 포인트컷] 주문 전에 로그 출력");}"execution(...)" 포인트컷 표현식을 어드바이스 어노테이션에 직접 인라인..
2023.05.23 -
Spring instrument library
spring-instrument는 Spring Framework에서 제공하는 라이브러리 중 하나로, 주로 Java 애플리케이션에서 AOP(Aspect-Oriented Programming)를 지원하거나 특정 기능을 추가하기 위해 사용됩니다. 특히, spring-instrument는 JVM(Java Virtual Machine) 레벨에서 클래스 로딩을 조작하거나, 프록시 객체를 생성하는 등의 기능을 수행할 수 있도록 도와줍니다.주요 사용 사례는 다음과 같습니다:Load Time Weaving (LTW):클래스가 JVM에 로드될 때 바이트코드를 변환하는 방식으로 AOP 기능을 적용하는 기법입니다. Spring AOP에서 런타임에 프록시 객체를 생성하지 않고, 클래스가 로드될 때 바이트코드를 변환하는 방식으로..
2023.05.22 -
@AspectJ support
@AspectJ @AspectJ는 자바의 애노테이션을 활용하여, 일반적인 자바 클래스를 통해 Aspect를 정의하는 스타일을 의미합니다.@Aspectpublic class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBeforeMethod() { System.out.println("Method is about to be called."); }} @AspectJ 스타일은 AspectJ 5 릴리스의 일환으로 AspectJ 프로젝트에서 도입되었습니다. Spring은 포인트컷을 해석하고 매칭[match:연결]하기 위해 AspectJ에서 제공하는 라이브러리를 사용하여 동일한 애노테이..
2023.05.22 -
Filter
Spring Web 모듈 필터 개요Spring Web 모듈은 서블릿 기반 애플리케이션에서 웹 요청을 처리하는 데 유용한 여러 필터를 제공합니다. 이 필터들은 Form 데이터 처리, 전달된 헤더 관리, 얕은 ETag 캐싱, CORS(교차 출처 리소스 공유) 처리를 위한 기능을 제공합니다. 각 필터의 역할에 대해 자세히 살펴보겠습니다.Form Data 필터디폴트로 브라우저에서는 HTTP GET 또는 POST 메서드를 통해서만 폼 데이터를 전송할 수 있습니다. 하지만 Non-브라우저 클라이언트(예: REST 클라이언트)는 다른 HTTP 메서드인 PUT, PATCH, 또는 DELETE를 사용하여 폼 데이터를 전송할 수 있습니다. Servlet API는 POST 요청에 대해서만 ServletRequest.getP..
2023.05.19 -
CGLIB Enhancer
🧠 CGLIB Enhancer 완전 정복: 동적 프록시를 생성하는 마법의 클래스📌 들어가며Spring AOP 또는 고급 프록시 프레임워크에서 흔히 등장하는 net.sf.cglib.proxy.Enhancer.이 클래스는 런타임에 기존 클래스(프록시 패턴에서의 타겟 클래스[Target Class])를 확장(상속)하여 새로운 프록시 클래스를 생성하는 핵심 클래스입니다.본 글에서는 CGLIB의 Enhancer가 어떤 역할을 하는지, 내부적으로 어떻게 동작하는지, 그리고 실무에서 어떻게 사용되는지를 심층적으로 분석해보겠습니다. ✅ 기본 역할: 클래스를 "향상(Enhance)" 시킨다Enhancer는 CGLIB에서 프록시 객체를 만들기 위한 중앙 클래스입니다. 📘 정의: Enhancer는 런타임에 특정 클래스..
2023.05.19