Spring - @AspectJ

2020. 8. 31. 15:46Java/Spring

반응형

@AspectJ 어노테이션을 활용해 Advisor 역할을 할 Bean을 설정할 수 있다.

 

 

1. beans.xml 세팅

beans.xml에 아래와 같이 context 태그를 이용해 빈즈 객체와 advisor로 사용할 component들을 스캔한다.

<context:component-scan base-package="cookingcoding.beans"/>
<context:component-scan base-package="cookingcoding.advisor"/>

그 후 아래 태그를 이용해 AOP의 자동 aspectj 기능을 활성화한다.

<aop:aspectj-autoproxy/>

 


2. Aspect 클래스 등록

AdvisorClass를 aspect 클래스로 등록시키기 위해서 @Aspect 어노테이션을 등록한다.

@Aspect
@Component
public class AdvisorClass {
	@Before("execution(* method1())")
	public void beforemethod() {
		System.out.println("before!!");
	}
	
	@After("execution(* method1())")
	public void Aftermethod() {
		System.out.println("After!!");
	}

	@Around("execution(* method1())")
	public Object aroundmethod(ProceedingJoinPoint pjp) throws Throwable{
		System.out.println("around before");
		Object a = pjp.proceed();
		System.out.println("aroundafter");
		return a;
	}
	
	@AfterReturning("execution(* method1())")
	public void returning(){
		System.out.println("returning");
	}
	
	@AfterThrowing("execution(* method1())")
	public void thro() {
		System.out.println("Throwing");
	}
}

@Aspect가 등록된 컴포넌트클래스는 AOP 관리기술인 

@Before,@After,@Around,@AfterReturning,@AfterThrowing등을 사용 가능하고, 기능은 beans.xml에서 직접 선언하여 사용했던 태그들과 같다.

 

 

 

@Before : 관심사 동작 이전에 호출된다.

@After : 관심사 동작 이후에 호출된다.

@Around : 관심사 동작 이전 이후를 의미한다.

@AfterReturning : 예외 없이 정상적으로 종료되었을 때 호출된다.

@AfterThrowing : 예외가 발생하여 종료되었을 때 호출된다.

 


3. Java BeanConfigClass에서 설정하기

beans.xml이 아닌 자바 파일에서도 설정이 가능한데, 컴포넌트를 스캔하는 클래스에 @EnableAspectJAutoProxy 어노테이션을 주는 것이다.

@Configuration
@ComponentScan(basePackages = {"cookingcoding.beans","cookingcoding.advisor"})
@EnableAspectJAutoProxy
public class BeanConfigClass {

}

위 코드는 컴포너트를 스캔하고, 자동으로 @Aspect 어노테이션을 찾아서  AOP를 적용시킨다.

반응형

'Java > Spring' 카테고리의 다른 글

Spring - mybatis  (0) 2020.09.01
Spring - JDBC(mysql)  (0) 2020.09.01
Spring - execution 사용법  (0) 2020.08.30
Spring - AOP  (0) 2020.08.29
Spring - Component 자동주입  (0) 2020.08.27