AOP: Aspect Oriented Programming
(OOP: Object Oriented Programming, 객체지향 프로그래밍보다 큰 개념이다.)
방법론. AOP를 구현할 때 Spring이 도움을 준다.
개발자 관점의 단위 업무, 관리자의 관점의 단위 업무 등으로 나눈다.
ex) 로그 처리, 보안 처리, 트랜잭션 처리 등의 사용자의 필요 외의 업무
Primary(Core) Concern: 업무 로직.
Cross-cutting Concern (Cross-cutting: 원래의 실행 방향을 잠시 끊으므로, cross): 부 업무 로직.
소스 코드가 있는 사람만 가능한 한계.
프록시를 이용하여 구현.
<bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"></bean>
두 가지 설정 필요:
1) target에 해당되는 개체의 classLoader
<property name="target" ref="target">
2) 곁다리 업무에 해당하는 로직(핸들러)
<property name="interceptorNames">
</property>
<bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="target">
<property name="interceptorNames">
<list>
<value>logAroundAdvice</value>
</list>
</property>
</bean>
//LogAroundAdvice(implements Method Interceptor)가 필요하다.
<bean id="logAroundAdvice" class="spring.aop.LogAroundAdvice" />
Exam exam = new NewlecExam(1,1,1,1);
Exam proxy = Proxy.newProxyInstance(loader, interfaces, h);
==> Exam proxy = Proxy.newProxyInstance(NewlecExam.class, h);
Before 어드바이스 (전)
After returnning 어드바이스 (후) : 둘 중 하나만 실행됨 0
After throwing 어드바이스 (예외처리) : 둘 중 하나만 실행됨
Around 어드바이스 (전+후)
<bean id="proxy" class="org.springframework.aop.framework.ProxyFactoryBean"></bean>
AOP 구현 방식
포인트 컷
조인 포인트: 조인하게 될 녀석으로서의 메소드
위빙: 곁다리 업무와 주업무를 연결하는 것
//위빙이 가능한 조인 포인트가 될 수 있는 함수로 total만 설정한 것
<bean id="classicPointCut" class="org.springframework.aop.support.NameMatch"MethodPointcut">
<property name="mappedName" value="total" />
</bean>
//이 포인트컷이 어떤 어드바이스와 연결될 것인지? : 어드바이저(adviser)가 결정
<bean id="classicBeforeAdvisor" class="org.springframework.aop.support.DefaultPointcut">
<property name="advice" ref="logBeforeAdvice" />
<property name="pointcut" ref="classicPointCut" />
</bean>
'BackEnd > Spring' 카테고리의 다른 글
[JPA] N+1 문제 (0) | 2023.01.26 |
---|---|
[Maven] Servlet/JSP 라이브러리 설정하기 (0) | 2021.09.28 |
[Spring] XML Configuration을 Java Configuration으로 변경하기 (0) | 2021.09.08 |
[Spring] @Component의 역할 (0) | 2021.09.08 |
[Spring] @Autowired의 역할 (0) | 2021.08.30 |
댓글