능글맞은 구렁이
Spring-AOP(어노테이션 기반) 본문
1. 어노테이션 기반 AOP설정
1) 어노테이션사용을 위한 스프링 설정
ㄱ) 스프링 설정 파일에 <aop:aspectj-autoproxy> </aop:aspectj-autoproxy>엘리먼트를 선언해야하는데
이 <aop:aspectj-autoproxy> </aop:aspectj-autoproxy> 엘리먼트를 선언하면 스프링 컨테이너는 AOP관련
어노테이션들을 인식하고 용도에 맞게 처리해준다.
ㄴ) AOP관련 어노테이션들은 어드바이스 클래스에 설정한다.
ㄷ) 어드바이스 클래스에 선언된 어노테이션들을 스프링 컨테이너가 처리하게 하려면, 반드시 어드바이스 객체가
생성되어 있어야 한다.
∴ 어드바이스 클래스는 반드시 스프링 설정 파일에 <bean> 등록하거나
@Service어노테이션을 사용하여 컴포넌트가 검색될 수 있도록 해야 한다.
2) 포인트컷 설정
ㄱ) 어드바이스 클래스 위에 @Service 어노테이션 작성
ㄴ) allPointCut() 메소드 → @Pointcut(참조 메소드)
3) 어드바이스 설정
ㄱ) @Before : 사용할 어드바이스 메소드에 어드바이스 어노테이션 설정
ㄷ) 즉 아래의 소스는 allPointcut( ) 참조 메소드로 지정한 비즈니스 메소드가 호출될 때, 어드바이스 메소드인
printLog( )메소드가 Before형태로 동작하도록 설정한 것이다.
4) 애스팩트 설정 (AOP설정에서 가장 중요한 애스팩스 설정방법)
ㄱ) @Service아래 정확하게는 어드바이스 클래스 위에 @Aspect를 선언한다.
ㄴ) @Aspect가 설정되었으므로 스프링 컨테이너는 LogAdvice객체를 애스팩트 객체로 인식한다. 그리고
LogAdvice 에는 포인트컷 메소드와 어드바이스 메소드가 선언되어 있는데, 이 두 메소드에 설정된
어노테이션에 의해 위빙이 처리된다.
5) Aspect설정 방법 코드
<!--XML설정방법-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
<context:component-scan base-package="com.freeflux.biz"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
--------------------------------------------------------------------------------------------------------------------------------------------
/**클래스 선언방법**/
@Service
@Aspect
public class LogAdvice {
public LogAdvice() {
}
@Pointcut("execution(* com.freeflux.biz..*Impl.*(..))")
public void allPointCut(){}
@Before("allPointCut()")
public void printLog(){
System.out.println("[공통 로그] 비즈니스 로직 수행 전 동작");
}
}
※참고※ ㄱ) 어드바이스 종류 : Before, After Returning, After Throwing, After, Around ㄴ) 어드바이스 란? 횡단 관심에 해당 ㄷ) 횡단 관심이란? 메소드마다 공통으로 등장하는 로깅이나 예외, 트랙잭션 처리 같은 코드들을 횡단 관심 ㄹ) Aspect란 advice와 pointcut의 결합이다. ※자세한 어드바이스는 아래 링크 참조※ 2021.06.21 - [Spring] - Spring-AOP(advice) |
'Framework > Spring' 카테고리의 다른 글
Spring-Transaction(트랜잭션) (0) | 2021.06.23 |
---|---|
Spring-JDBC(Oracle) (0) | 2021.06.22 |
Spring-AOP(XML 기반) (0) | 2021.06.22 |
Spring-AOP(advice) (0) | 2021.06.21 |
Spring-AOP(간략한 흐름) (0) | 2021.06.21 |