Spring Framework/Aspect Oriented Programming with Spring(24)
-
DelegatingIntroductionInterceptor의 delegate 객체 생성
DelegatingIntroductionInterceptor에서 delegate를 임의의 객체로 설정하는 방법은 간단합니다. 생성자에서 delegate를 인자로 받아서 설정하면 됩니다. 이렇게 설정된 delegate는 도입된 인터페이스의 메서드 호출을 처리하게 됩니다.아래는 delegate를 임의의 객체로 설정하는 예제 코드입니다.예제 코드먼저, 도입할 인터페이스와 해당 인터페이스의 실제 구현체를 정의합니다.// 도입할 인터페이스public interface Lockable { void lock(); void unlock(); boolean locked(); }// Lockable 인터페이스를 구현한 클래스 (Delegate로 사용할 객체)public class CustomL..
2023.05.19 -
Java Agent
Java Agent는 Java 애플리케이션의 실행 중 동작을 변경하거나 모니터링할 수 있는 특별한 프로그램입니다. Java Agent는 JVM(Java Virtual Machine)과 상호 작용하여 클래스 로딩 시점에 바이트코드를 조작하거나, 이미 로드된 클래스의 동작을 런타임에 수정할 수 있습니다. 이러한 기능은 성능 모니터링, 디버깅, 프로파일링, 코드 커버리지 분석, 그리고 AOP(Aspect-Oriented Programming) 구현 등 다양한 목적에 사용됩니다.Java Agent의 주요 특징premain 메서드:Java Agent는 JVM이 시작될 때 premain 메서드를 통해 실행됩니다. 이 메서드는 JVM이 메인 애플리케이션을 실행하기 전에 호출됩니다.premain 메서드는 두 가지 형태..
2023.05.17 -
AOP Concepts, Spring AOP Capabilities and Goals, AOP Proxies
AOP Concepts먼저, 중심이 되는 AOP 개념과 용어를 정의해보겠습니다. 이 용어들은 Spring에만 국한된 것이 아닙니다. 불행히도, AOP 용어는 직관적이지 않은 경우가 많습니다. 하지만 Spring이 자체 용어를 사용하는 것보다는 이 용어들을 사용하는 것이 덜 혼란스러울 것입니다.Aspect: Aspect(관점)은 여러 클래스에 걸쳐 있는 공통 관심사를 모듈화하는 방법으로, 트랜잭션 관리, 로깅, 보안 등이 대표적인 예입니다. Spring AOP에서 aspect는 일반 클래스(스키마 기반 접근 방식)를 사용하거나 @Aspect 애노테이션이 있는 일반 클래스를 사용하여 구현됩니다(@AspectJ 스타일).Join point: 프로그램 실행 중의 한 시점으로, 메서드 실행이나 예외 처리와 같은 ..
2023.05.16 -
Java Instrumentation API
Instrumentation API는 Java 플랫폼의 java.lang.instrument 패키지에서 제공되는 API로, JVM의 클래스 로딩 및 런타임 동작을 조작할 수 있도록 하는 API이며, 이 API 자체는 인터페이스로 제공됩니다. 이 API는 주로 성능 모니터링, 프로파일링, 코드 커버리지 도구, 그리고 AOP(Aspect-Oriented Programming) 같은 기술을 구현할 때 사용됩니다. 구현체는 JVM 내부에서 이 API를 구현하고, 이를 통해 Java Agent와 같은 도구들이 해당 기능을 사용할 수 있도록 합니다.주요 기능ClassFileTransformer:ClassFileTransformer는 클래스가 로드되기 전에 바이트코드를 변환할 수 있는 인터페이스입니다. 이를 통해 클..
2023.05.16 -
AOP Alliance (Java/J2EE AOP standards)
Introduction이 문서의 목적은 AOP Alliance 프로젝트를 소개하는 것입니다. 그 목표, 철학, 제공해야 할 답변, 그리고 제공하지 말아야 할 것들에 대해 다루고자 합니다. 이 문서는 AOP Alliance의 다른 구성원들과 논의를 통해 우리가 여기서 무엇을 하고 있는지에 대한 공통된 견해를 도출하기 위해 추가 논의가 필요한 초안 제안서입니다. 또한, 목록에서 논의 중에 흥미로운 점이 나오면 이 문서에 추가되어야 합니다.이 문서는 백서(white paper)로, AOP Alliance 구성원들이 내부적으로 사용할 수 있을 뿐만 아니라 외부 사람들에게 AOP Alliance가 무엇인지에 대한 통찰과 이해를 제공하는 데에도 사용될 수 있습니다. AOP Alliance goalsAOP Advan..
2023.05.10 -
Instrumentation API vs AspectJ
Instrumentation API와 AspectJ는 서로 독립적인 기술이지만, AspectJ가 AOP(Aspect-Oriented Programming) 기능을 제공하는 데 있어 Instrumentation API를 활용할 수 있는 상황이 존재합니다. 그러나 Instrumentation API는 AOP 기능을 위해 반드시 AspectJ와 협력해야 하는 것은 아닙니다. 이 둘은 각각 다른 목적과 기능을 가지고 있으며, 특정 상황에서 협력할 수 있다는 것이 더 정확한 설명입니다.독립적인 역할Instrumentation API:주된 역할: 클래스 파일을 로드하거나 이미 로드된 클래스의 바이트코드를 런타임에 변경하는 것. AOP는 Instrumentation API의 핵심 기능이 아니며, 이 API는 성능 모..
2023.05.03