이전 Around Advice와 달리 Before Advice의 경우 대상을 실행하기 전에 수행된다.
먼저 다음과 같이 클래스를 생성한다.
Around Advice와 달리 Before Advice는 주 업무의 위치를 기입하지 않아도 된다.
(Around Advice의 invocation.proceed()
)
package spring.aop.advice;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class LogBeforeAdvice implements MethodBeforeAdvice{
@Override
public void before(Method method, Object[] args, Object target) throws Throwable {
System.out.println("먼저 실행될 로직 ");
}
}
이후 xml에서 DI에 대한 정보를 삽입하면 된다.
<!-- Cross-cutting Concern(보조 업무 로직)을 활용할 경우 -->
<bean id="target" class="spring.aop.entity.NewlecExam" p:kor="1" p:eng="2" p:math="1" p:com="3"/>
<bean id="logAroundAdvice" class="spring.aop.advice.LogAroundAdvice" />
<bean id="logBeforeAdvice" class="spring.aop.advice.LogBeforeAdvice" />
<bean id="exam" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="target"></property>
<property name="interceptorNames">
<list>
<value>logAroundAdvice</value>
<value>logBeforeAdvice</value>
</list>
</property>
</bean>
실행 결과
먼저 실행될 로직 204ms 소요 total is 7 먼저 실행될 로직 203ms 소요 avg is 1.75
Before Advice, Around Advice 모두 정상적으로 동작한다.