-
클래스멤버함수 호출에 전후처리(AOP없이 기본적인 Proxy처리)
class C1 { public void f1() { //work } public void f2() { //work } } C1 c = new C1(); C1 proxy = (C1) Proxy.newProxyInstance(C1.class.getClassLoader(), new Class[] {C1.class}, new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) { //전처리 //... //목적함수(원래함수) 처리 Object r = method.invoke(c, args) //후처리 //... return r; } }); //함수호출을 하면 전후처리가 같이 불려진다. proxy.f1() proxy.f2()
AOP로 전후처리
위 예제에서 AOP를 적용하여 좀더 간단하게 처리가능하다. 전후처리 시점에서 특정 클래스가 불려지도록 지정하면 된다.
전후처리 시기에서 끼워 넣을 수 있는 위치
전처리 org.springframework.aop.MethodBeforeAdvice
리턴후처리(예외없을 조건) org.springframework.aop.AfterReturningAdvice
예외발생시에만처리 org.springframework.aop.AfterThrowingAdvice
후처리(예외무관) org.springframework.aop.MethodAfterAdvice
위의모든상황에처리 org.springframework.aop.AroundAdvice위 클래스를 상속받아 가상함수를 구현(Override)하여 클래스를 Proxy에 연결시키면 작동한다.
클래스를 연결시키는 처리를 xml에서 지정한다. 목적클래스와 proxy생성(org.springframework.aop.framework.ProxyFactoryBean)을 하게 하고 proxy에 목적클래스를 연결시킨다. 이 기본관계에서 진후처리로 불려질 클래스를 각각 지정하면 호출된다.
Weaving
전후처리
JoinPoint
목적클래스
Pointcuts
목적클래스에 특정 멤버함수에서만 전후처리가 작동되도록 설정
'Spring' 카테고리의 다른 글
spring.jpa.hibernate.hbm2ddl.auto (0) 2022.09.26 Springboot에 H2 database 사용 (0) 2022.09.26 Springboot Mustache 준비 (0) 2022.09.25 Springboot html 만들기 (0) 2022.09.25 Springboot server port 변경 (0) 2022.09.25 Vsc Spring Boot 사용 준비 (0) 2022.08.06 Java SpringFramework - MVC (0) 2020.07.03 Java SpringFramework - DI(DependencyInjection) (0) 2020.07.03