Spring | AspectJ 이용 | Bean 설정 클래스 이용

이제 이것으로 AspectJ의 기본적인 이용 방법은 알았다. Spring Framework에서는 Bean은 설정 파일이 아닌 클래스를 사용하여 정의 할 수 있었다. AspectJ에도 정의 클래스로 설정을 해 보자.

com.devkuma.spring.aop 패키지에 “SampleAspectConfig"라는 클래스를 작성한다. 그리고 아래와 같이 코드를 작성하자.

package com.devkuma.spring.aop;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
 
@Configuration
@EnableAspectJAutoProxy
public class SampleAspectConfig {
     
    @Bean
    SampleAopBean sampleAopBean() {
        return new SampleAopBean("this is AspectJ bean.");
    }
     
    @Bean
    SampleAspect sampleAspect() {
        return new SampleAspect();
    }
 
}

이것이 AspectJ 설정 클래스이다. 작성한 후 App.java을 열고 다음 문장을 수정한다.

App 수정 전

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

App 수정 후

ApplicationContext app =
    new AnnotationConfigApplicationContext (SampleAspectConfig.class);

이제 실행하면 이전과 마찬가지로 AspectJ를 이용한 방법의 삽입이 이루어 메소드 호출 전후에 처리가 실행되게 된다. 이 클래스에는 설정 클래스임을 나타내는 @Configuration 외에,

@EnableAspectJAutoProxy

이러한 어노테이션이 클래스에 추가되어 있다. 이것은 Bean 정의 파일에 넣었던 <aop:aspectj-autoproxy/> 태그에 해당하는 것이다. 이것을 기술하는 것으로 AspectJ의 자동 프록시 기능이 ON이 되고, 자동으로 Aspect 클래스의 메소드 삽입이 이루어지게 된다.

Bean의 정의는 지금까지와 변함이 없다. 다만, @EnableAspectJAutoProxy를 추가하는 것만으로 AspectJ의 기능이 ON이 된다는 점이다. 그래도 설정 클래스으로 변경을 한다고 해도 AspectJ 이용의 간단함은 변함이 없다는 것을 알 수 있다.