Spring Framework(179)
-
Spring Web MVC
Section SummaryDispatcherServletFiltersAnnotated ControllersFunctional EndpointsURI LinksAsynchronous RequestsCORSError ResponsesWeb SecurityHTTP CachingView TechnologiesMVC ConfigHTTP/2 출처 : https://docs.spring.io/spring-framework/reference/web/webmvc.html
2025.06.29 -
DefaultAdvisorAutoProxyCreator
DefaultAdvisorAutoProxyCreator는 Spring AOP의 핵심 자동 프록시 생성기 중 하나로, 등록된 Advisor 빈을 기반으로 자동으로 프록시를 생성하는 고급 자동 프록시 생성기입니다.이를 통해 트랜잭션, 보안, 로깅 등 다양한 AOP 기능을 관심사 분리 원칙에 따라 적용할 수 있도록 설계되어 있습니다. 📌 핵심 요약: DefaultAdvisorAutoProxyCreator란?Advisor(즉, Pointcut + Advice 조합)를 기반으로포인트컷에 매칭되는 빈들에 대해 자동으로 프록시를 생성해주는 BeanPostProcessor입니다.트랜잭션 AOP (@Transactional)보안 AOP (@Secured)커스텀 AOP (MethodInterceptor 사용)위와 같은 ..
2025.06.16 -
BeanNameAutoProxyCreator
BeanNameAutoProxyCreator는 Spring Framework의 AOP(Aspect-Oriented Programming)에서 제공하는 자동 프록시 생성기(Auto Proxy Creator) 중 하나로, 이름에서 알 수 있듯이 "빈 이름"에 기반하여 프록시를 생성합니다.이 클래스는 AbstractAutoProxyCreator → AbstractBeanNameAutoProxyCreator → BeanNameAutoProxyCreator의 구조를 따릅니다. 🧠 개요: BeanNameAutoProxyCreator란?BeanNameAutoProxyCreator는 빈 이름과 일치하는 대상에 대해 자동으로 프록시를 생성하고, 지정된 **인터셉터(advice)**들을 적용해줍니다.@Beanpublic..
2025.06.16 -
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