Spring Framework/Aspect Oriented Programming with Spring(29)
-
CGLIB + Objenesis를 사용하는 Spring
생성자 우회1. 전통적인 객체 생성 흐름 vs Objenesis 흐름단계전통적 new + 생성자Objenesis① 클래스 메타데이터 확보동일동일② 생성자 실행✔ 필수❌ 생략③ 필드에 디폴트값 할당JVM 자동JVM 자동④ 프록시/모킹·프레임워크가 필드 주입이후 가능이후 가능포인트 : Objenesis는 ② 단계를 건너뜀으로써 “생성된 직후의 객체가 실제로 super() 호출을 거치지 않은 빈 껍데기 상태임을 보장합니다. 2. 생성자 우회가 주는 6가지 핵심 장점2-1. 부작용(side effect) 두 번 실행 방지프록시 클래스는 타겟 클래스를 상속합니다.이때 생성자를 그대로 실행하면 타겟 쪽 로직(예: DB 커넥션, 파일 I/O, 원격 호출)이 프록시를 만들 때에도 또 실행될 수 있습니다.Objenesi..
2025.06.15 -
Objenesis
Objenesis는 Java 객체를 생성자 호출 없이 인스턴스화할 수 있도록 해주는 라이브러리입니다. 일반적인 Java 코드에서는 new 키워드나 리플렉션(Constructor.newInstance())을 통해 객체를 생성할 때 생성자가 반드시 호출되지만, Objenesis는 이 과정을 우회해서 생성자를 호출하지 않고 객체를 만들 수 있게 해줍니다. 🔧 왜 Objenesis가 필요한가요?Java에서 객체를 생성할 때는 보통 생성자가 호출됩니다. 하지만 때로는 생성자를 호출하지 않고 객체를 생성해야 하는 경우가 있습니다:프록시/직렬화/역직렬화 프레임워크: 객체를 생성하되, 생성자에 부작용이 있는 경우 이를 피하고 싶을 때(예: java.io.Serializable에서 역직렬화는 생성자를 호출하지 않음)객..
2025.06.11 -
"com.xyz.trading..*" vs "com.xyz.trading.*.*"
@Pointcut("within(com.xyz.trading..*)") 이 포인트컷 표현식은에서 "com.xyz.trading..*"는 패키지 이름을 의미합니다. 구체적으로 설명드리면:🔹 "within(com.xyz.trading..*)" 의미 분석within(...):해당 타입이 속한 클래스의 전체 이름(qualified name)이 지정한 패턴에 속하는 경우에만 적용됩니다.즉, 클래스가 특정 패키지에 존재할 때 포인트컷이 매칭됩니다."com.xyz.trading..*":com.xyz.trading은 패키지 이름입니다...은 하위 패키지까지 모두 포함한다는 의미입니다.*은 모든 클래스를 의미합니다.따라서, 이 포인트컷은 다음에 해당하는 모든 클래스에 정의된 메서드 실행 시점을 매칭합니다:com.xyz..
2025.06.11 -
@EnableAspectJAutoProxy
🌿 Spring AOP @EnableAspectJAutoProxy@EnableAspectJAutoProxy는 Spring AOP 환경에서 AspectJ 스타일의 애스펙트(@Aspect)를 적용할 수 있게 해주는 애노테이션입니다. XML 설정 방식의 를 대체하는 자바 기반 설정 방식이라고 이해하면 됩니다. ✅ 왜 @EnableAspectJAutoProxy가 필요한가?Spring은 디폴트로 POJO 객체에 대해 AOP 기능을 적용하려면 프록시(proxy)를 생성해야 합니다.그리고 어떤 클래스가 @Aspect로 마킹되어 있을 때, 이를 처리해주는 AOP Post processor(Advisor, Advice)를 동작하게 만드는 설정이 바로 @EnableAspectJAutoProxy입니다. 🧩 기본 사용법@..
2025.06.09 -
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 -
Aspect Oriented Programming with Spring
AOP(Aspect-Oriented Programming)는 프로그램 구조를 생각하는 또 다른 방법을 제공하여 OOP(Object-Oriented Programming)를 보완합니다. OOP에서의 주요 모듈화 단위는 클래스인 반면, AOP에서는 모듈화 단위가 aspect입니다. aspect는 트랜잭션 관리와 같은 여러 타입과 객체에 걸쳐 있는 문제를 모듈화할 수 있게 해줍니다. 이러한 문제는 AOP 문헌에서 흔히 cross-cutting concerns라고 불립니다.Spring의 주요 구성 요소 중 하나는 AOP 프레임워크입니다. Spring IoC 컨테이너는 AOP에 의존하지 않으므로(AOP를 사용하지 않아도 된다는 의미) AOP를 꼭 사용해야 하는 것은 아니지만, AOP는 Spring IoC를 보완하..
2024.11.17