본문 바로가기
✨ Back-end/Spring-Legacy

[Spring-legacy] xml로 AOP 어드바이스(Advice)

by 환풍 2023. 8. 25.
728x90

AOP의 역할들에는 다양하게 있다.

1. 어드바이스 (Advice)

2. 조인포인트 (JoinPoint)

3. 포인트 컷 (PointCut)

4. 애스펙트 (Aspect)

5. 인트로덕션 (Introduction)

6. 타깃( Target)

7.  프록시 (Proxy)

8. 위빙(Weaving)

 

이번에는 Advice에 대해 정리해보았다.

 

 

Dao 인터페이스, OracleDao 클래스

Dao 인터페이스를 만들고, OracleDao에서 Dao를 구현하려고 한다.

인터페이스에서 정의한 메소드를 OracleDao 클래스에서 출력문을 구현해보았다.

 

BeforeAdvice 클래스

인터페이스 BeforeAdvice를 가져오려고하는데, 만들어주지 않았음에도 이렇게 가져올 수 있다.

berforeAdvicemethod( ) 라는 메소드를 직접 만들어주었다.

 

AfterAdviceEx 클래스

마찬가지로, AfterAdvice 인터페이스도 만들어주지 않아도 가져와줄 수 있다.

afterAdviceMethod( ) 를 직접 만들어 주었다.

 

Dao.xml

xml을 하나 생성해주는데, aop, context, p 등을 체크하여 만들어준다.


 

Dao.xml

<aop:config>

AOP 설정을 정의하기 위한 태그를 열고 있는 것이다.

<aop:aspect>

id 속성으로 애스펙트의 식별자를 지정하고, ref 속성으로 해당 애스팩트를 참조하는 빈의 이름을 지정한다.

<aop:before>

어드바이스의 한 유형인 before 어드바이스를 정의한다.

mathod 속성에는 beforeAdvice 빈에서 실행할 메서드 이름을 지정한다.

pointcut 속성에는 해당 어드바이스를 적용할 포인트 컷(PointCut)을 지정해야 한다.

*포인트 컷은 어느 조인포인트에서 어떤 동작을 적용할지 결정한다.

 

AdviceMain 

 

main 메소드가 있는 클래스를 만들어 xml을 출력하는 context를 만들어주고, 생성해본다.


오류가 난다면,

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.20</version>
    <scope>runtime</scope>
</dependency>

AspectJ Weaver를 maven repository가서 코드를 복사해 xml 파일에 넣어줘야한다.

 


AOP 테스트

 

메소드에 매개변수가 없다. 즉, 인자가 없는 걸로 두개 만들어서 실험해보았다.

 

( .. ) 으로 테스트

( .. ) = 인자가 있어도 그만 없어도 그만이다.

AdviceMain

인자가 없는 메소드를 생성하여 aop 설정을 한후 before 값만 찍어본 결과.

위와 같이 메소드가 찍힐 때마다 before은 메소드가 실행되기 전에 출력되는 것이므로, 두개가 정상적으로 나왔다.

 

( .. ) 으로 테스트 , aop after 메소드 함께 조회

aop : after는 메소드 실행 후 동작하므로 정상적으로 찍힌걸 확인할 수 있다.

 

( * )과 ( .. ) 으로 테스트

만약 ..대신 *을 넣으면 반드시 매개변수 즉, 인자가 있는 값들만 나오게 되는 것이다.

( ) 으로 테스트

만약 .. 이나 * 둘다 안넣고 빈값으로 두개 되면, 인자가 하나도 없는 것들만 정상적으로 조회되는 걸 확인해볼 수 있다.

 

반응형

댓글