공부/Spring 4

AOP

핵심 기능과 부가 기능의 분리 AOP(Aspect-Orientd Programming) : 애플리케이션을 바라보는 관점을 하나하나의 관점에서 횡단 관심사 관점으로 달리보는것. *횡단관심사: 애플리케이션 전반에 걸쳐 핵심 관심에 영향을주는 영역 내가 원하는 핵심기능에 부가기능을 적용 할 수 있다. AOP의 대표적인 구현으로 AspectJ Framework가 존재한다. Spring에서는 AspectJ의 문법을 차용하고, AspectJ의 제공하는 기능의 일부만을 제공한다. 횡단 관심사의 모듈화 오류 검사 및 처리 동기화 캐싱 모니터링 및 로깅 AOP 적용방식 컴파일 시점 적용 .java 소스를 AspectJ컴파일러를 사용해 .class를 만드는 시점에 부가기능 로직을 추가 할 수 있다. 원본 로직에 부가 기능..

공부/Spring 2024.01.14

빈 후처리기

@Bean이나 Component Scan 으로 스프링 컨테이너 내부에 빈 저장소에 등록하기전 해당 빈을 조작 후 등록한다. (빈을 생성한 후로 무언가를 처리하는 용도) 객체를 조작 할 수도 있고 , 다른 객체로 바꿔치기도 가능함. 빈으로 등록될 A,B 클래스가 존재한다. 빈 후처리기 클래스. 초기화된 빈이 만약 A라면? B를 인스턴스화 해서 B를 return하여 스프링 컨테이너에 B 객체를 등록한다. config를 통해 빈은 A 객체만 등록되도록 설정해놓았지만 빈 후처리기에 의해 B 객체가 스프링 컨테이너에 등록됬단것을 확인 할 수 있다.

공부/Spring 2024.01.13

포인트컷, 어드바이스, 어드바이저

포인트컷: 어디에 부가기능을 적용할지 적용하지않을지 판단하는 필터링 로직 클래스와 메서드이름으로 필터링한다. 어드바이스: 프록시가 호출하는 부가기능, 프록시 로직이 작성되는곳. 어드바이저: 포인트컷과 하나의 어드바이스를 가지고 있는것 이렇게 나눠둔 이유는? "역할과 책임을 분리하기위해" 포인트컷은 대상 여부를 확인하는 필터 역할만을 담당 어드바이스는 부가기능 로직만을 담당 둘을 합치면 어드바이저가 된다. 프록시 팩토리를 이용할 때 어드바이저는 필수이다. 스프링은 target마다 하나의 프록시를 만들고 여러개의 어드바이저를 호출한다. 어드바이저당 여러개의 프록시가 생성되는것이 아님

공부/Spring 2024.01.12

CGLIB

CGLIB: 바이트 코드를 조작해 동적으로 클래스를 생성해주는 라이브러리 인터페이스 없이 구체 클래스만 존재해도 프록시를 만들어 낼 수 있다. 외부 라이브러리지만, Spring FrameWork 내부 소스코드에 포함되어있음, 별도 추가 X MethodInteceptor 를 제공한다. package org.springframework.cglib.proxy; public interface MethodInterceptor extends Callback { Object intercept( Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable; } obj : CGLIB이 적용된 객체 method: 호출된 메서드 args: 메서드..

공부/Spring 2024.01.11