Spring | AspectJ 이용 | 프로그램을 실행


이것으로 AspectJ를 사용할 준비가 되었다. 그럼 Bean을 이용하여 보자. com.devkuma.spring.aop 패키지의 App 클래스 (전에 사용 했던 거)을 아래와 같이 수정한다.

package com.devkuma.spring.aop;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class App {
 
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("aopbean.xml");
         
        SampleAopBean bean = (SampleAopBean) app.getBean("sampleAopBean");
        String msg = bean.getMessage();
        bean.setMessage("<<" + msg + ">>");
        bean.printMessage();
    }
 
}

이것을 실행하면 다음과 같이 출력이 될 것이다.

before :
after :
before :
after :
before :
message : [<< this is AOP bean! >>
after :

여기에서는 getMessage로 메시지를 얻어서, 그것을 바탕으로 setMessage 메시지를 설정하고, 그것으로 부터 printMessage 내용을 출력한다. 각각의 메소드를 호출마다 그 전과 후에 before / after가 출력되는 것을 볼 수 있다.

이전에 Spring AOP와 결정적인 차이는 getBean으로 얻어 실행하는 클래스이다. Spring AOP에서는 ProxyFactoryBean를 통해서 수정된 SampleAopBean를 얻을 수 있게 되어 있었다.

이번에 getBean으로 얻은 것은 SampleAopBean이다. 즉, SampleAopBean 클래스 자체가 변경된 메소드가 삽입되어 있는 것이다.

동작을 확인했다면 aopbean.xml을 열고 <aop : aspectj-autoproxy/> 태그를 삭제하자. 그리고 실행하면 이번에는 “message:[<< this is AOP bean! >>]“만 표시된다. before / after에 삽입된 것 메소드가 사라진 것을 알 수 있다.

이처럼 AspectJ를 사용하면 자동 프록시의 ON / OFF만으로 화면 처리의 삽입과 제거가 간단히 할 수 있다. 사용하는 Bean을 프록시 Bean에서 원래대로 되돌릴 수는 없다.