추가 공부

[Spring] Aop 태그 종류 및 설명

개발자가 되고 싶은 곰 2024. 10. 15. 21:02

aop:config 태그

AOP를 선언할 수 있게 해주는 태그이다.

 

aop:aspect 태그

더보기

특정 포인트컷을 정의하는 태그이며

해당 포인트컷을 실행할 참조(reference)값을 설정해줍니다.

 

속성

id: Aspect의 고유 아이디
ref: Aspect가 정의된 빈의 이름


aop:pointcut 태그

더보기

포인트컷을 정의해줍니다.

 

속성

id: 포인트컷의 고유 아이디
expression: 포인트컷 표현식


aop:before 태그

더보기

메서드 실행 전 실행

 

속성

method: 호출할 메소드의 이름

pointcut-ref: 포인트컷의 이름
pointcut: 적용할 포인트컷 표현식


aop:after 태그

더보기

메서드가 정상적으로 리턴된 후 실행

 

속성

method: 호출할 메소드의 이름

pointcut-ref: 포인트컷의 이름
pointcut: 적용할 포인트컷 표현식
returning: 리턴 값을 저장할 변수명


 

간단한 예제

pom.xml (의존성 주입)

더보기
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-aspects</artifactId>
</dependency>

 

applicationContext.xml (스프링 컨테이너)

더보기
<bean class="com.nsd.app.biz.common.TestAdvice" id="logAdvice"/>
<aop:config>
	<aop:pointcut id="board_obj" expression="execution(* com.nsd.app.biz.board.BoardServiceImpl.insert(..))"/>
	<aop:aspect ref="logAdvice">
		<aop:after method="insert_log" pointcut-ref="board_obj"/>
	</aop:aspect>
</aop:config>

 

TestAdvice.java

더보기
import com.nsd.app.biz.board.BoardDTO;
import org.aspectj.lang.JoinPoint;

public class TestAdvice {
    public void insert_log(JoinPoint jp) {//바인드 변수
        System.out.println("TestAdvice.java log 넘어온 데이터 ["+jp.toString()+"]");
        String methodName = jp.getSignature().getName();

        System.out.println("TestAdvice.java log 현재 이 어드바이스랑 연결된 조인포인트의 메서드명");
        System.out.println("TestAdvice.java log ["+methodName+"]");

        Object[] args = jp.getArgs();
        BoardDTO boardDTO = (BoardDTO) args[0];
        System.out.println("현재 이 어드바이스랑 연결된 조인포인트의 매개변수 정보");
        System.out.println(boardDTO.getBoard_writer_id() + "님이 글을 DB에 등록되었습니다.");
    }


}

 

728x90