전체 글(554)
-
Pointcut Expression 예제들
🧩 Pointcut Expression 전체 구조: execution(modifiers-pattern? return-type declaring-type? method-name-pattern(param-pattern) throws-pattern?) 🧪 Pointcut Expression 예제들execution( * // 리턴 타입: 아무 타입이나 transfer // 메서드 이름: transfer라는 이름 (..) // 파라미터: 개수와 타입 상관없이) 🔍 세부 구성 설명구성 요소설명executionAOP의 표현식 종류 중 하나로, 메서드 실행 조인포인트를 지정합니다. Spring AOP는 이 execution() 만 지원합니다..
2025.06.07 -
CGLIB 프록시 호출 흐름 완전 분석
🧠 CGLIB 프록시 호출 스택 철저 분석 + super.sayHello() 바이트코드 검증🧩 전체 콜스택 원형 🧪위 call stack과 관련된 샘플 소스 코드1. GreetingServiceImpl (타겟 클래스)package com.intheeast.cglibdemo.service;public class GreetingServiceImpl { public void sayHello(String name) { System.out.println("👋 Hello, " + name); }} 2. MethodInterceptor 인터페이스 구현체import java.io.FileWriter;import java.io.IOException;import java.io.PrintWr..
2025.06.06 -
Class.isAssignableFrom()
🧠 Java Class.isAssignableFrom()– 클래스 간 타입 대입 가능성을 런타임에 검증하는 핵심 리플렉션 메서드 A(Class 객체)는 B(아규먼트)로부터 할당 가능하다 → B 타입의 객체를 A 타입 변수에 대입할 수 있다는 의미A a = new B(); // ✅ A는 B로부터 할당 가능하다 ✅ 개요Class.isAssignableFrom(Class cls)는 Java 리플렉션 API의 중요한 메서드 중 하나로,클래스 간 타입 계층 관계를 런타임에 안전하게 검사할 수 있게 해줍니다.이 메서드는 특히 다음과 같은 상황에서 자주 사용됩니다:프레임워크에서 특정 타입을 구현한 클래스를 찾을 때DI(의존성 주입) 컨테이너에서 인터페이스 구현체를 매핑할 때직렬화/역직렬화 시 타입 체크플러그인 ..
2025.06.03 -
String 클래스가 구현하는 Comparable<String> 인터페이스
🔧 String은 Comparable 인터페이스를 구현함public final class String implements java.io.Serializable, Comparable, CharSequence, Constable, ConstantDesc { // 생략... public int compareTo(String anotherString) { byte v1[] = value; byte v2[] = anotherString.value; byte coder = coder(); if (coder == anotherString.coder()) { ..
2025.06.02 -
The Reflection API
Uses of Reflection리플렉션은 Java 가상 머신에서 실행 중인 애플리케이션의 런타임 동작을 검사하거나 수정해야 하는 프로그램에서 일반적으로 사용됩니다. 이는 비교적 고급 기능이며, 언어의 기초를 확실히 이해한 개발자만 사용하는 것이 좋습니다. 이러한 주의사항을 염두에 두었을 때, 리플렉션은 강력한 기술이며, 그렇지 않으면 불가능한 작업을 수행할 수 있도록 애플리케이션을 확장할 수 있습니다. Extensibility Features애플리케이션은 외부의 사용자 정의 클래스를 확장성 객체로 생성하여 해당 클래스의 완전한 수식 이름(fully-qualified name)을 이용해 사용할 수 있습니다. Class Browsers and Visual Development Environments클래..
2025.05.28 -
@AliasFor
“어노테이션의 특정 엘리먼트(속성)에 별칭(alias)이 왜 필요하냐?”그냥 하나의 속성으로 만들면 되지, 왜 굳이 다른 이름으로 같은 걸 연결하는 이유는? ✅ 1. 사용자가 익숙한 방식으로 쓰도록 하기 위해 (API 유연성)예: @RequestMapping Spring에서는 아래 두 가지 방식 모두 허용합니다:@RequestMapping("/hello") // value를 생략한 축약형@RequestMapping(path = "/hello") // 명시적으로 path 속성 지정 그런데 사실 value()와 path()는 같은 뜻입니다. 그래서 Spring에서는 이렇게 선언해놨습니다:@AliasFor("path")String value() default "";@Alias..
2025.05.26