Spring | AOP 이용 | 어노테이션으로 AOP 설정 클래스 생성

이것으로 기본은 알았다. 이번에는 bean.xml를 클래스에 고쳐 써 보자. Spring Framework에서는 Bean 설정 파일을 사용하지 않고, 설정을 위한 클래스으로 같은 것이 가능하다.

그럼 com.devkuma.aop 패키지 “SampleAopConfig"라는 클래스를 만들어 보자. 그리고 아래와 같이 소스 코드를 작성한다.

package com.devkuma.spring.aop;
 
import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class SampleAopConfig {
    private SampleAopBean sampleAopBean = 
        new SampleAopBean("this is message bean.");
    private SampleMethodAdvice sampleMethodAdvice = 
        new SampleMethodAdvice();
     
    @Bean
    SampleAopBean sampleAopBean() {
        return sampleAopBean;
    }
     
    @Bean
    SampleMethodAdvice sampleMethodAdvice() {
        return sampleMethodAdvice;
    }
     
    @Bean
    ProxyFactoryBean proxyFactoryBean() {
        ProxyFactoryBean bean = new ProxyFactoryBean();
        bean.setTarget(sampleAopBean);
        bean.setInterceptorNames("sampleMethodAdvice");
        return bean;
    }
     
}

작성을 하면 bean.xml를 사용하던 것을 SampleAopConfig 클래스를 사용하도록 App 클래스의 코드를 수정한다. 다음 문장을 바꾸면 된다.

App 수정

ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");

    ↓

ApplicationContext app = new AnnotationConfigApplicationContext (SampleAopConfig.class);

이것으로 App을 실행하면 방금처럼 출력이 된다. bean.xml에 기술된 것과 동일한 Bean이 SampleAopConfig에서 취 할 수 있도록 되어있는 것을 알 수 있다.

여기에서 @Configuration 어노테이션을 붙여 SampleAopConfig 클래스를 선언하고, Bean 인스턴스를 반환하는 메서드에 @Bean 어노테이션 붙여서 Bean을 취득할 수 있도록 하고 있다. 주목을 해야 하는 것을 SampleMethodAdvice 인스턴스를 작성하고 있는 sampleMethodAdvice 메소드이다. 인스턴스 작성 후에 다음과 같이 필요한 속성을 설정하고 있다.

bean.setTarget(sampleAopBean);
bean.setInterceptorNames ("sampleMethodAdvice");

이는 “setTarget"과 “setInterceptorNames"가 먼저 bean.xml에서 기술하고 있었던 <property name="target"><property name="interceptorNames">에 해당하는 처리한다는 것이다.