[Spring] Spring AOP
2022. 3. 27. 21:00ㆍDev/Spring
Spring AOP 개념이 정리가 안돼서
여기에 글을 쓰면 정리가 될까 싶어서 올린다
📌 AOP(Aspect Oriented Programming)란?
메서드의 시작 또는 끝에 자동으로 부가기능 코드(advice)를 동적(=실행 중에)으로 추가해 주는 기술이다.
📌 AOP 관련 용어
용어 | 설명 |
target | advice가 추가될 객체 |
advice | target에 동적으로 추가될 부가 기능(코드) |
join point | advice가 추가(join)될 대상(메서드) |
pointcut | join point들을 정의한 패턴 |
proxy | target에 advice가 동적으로 추가되어 생성된 객체, advice(부가기능) + target(핵심기능) = proxy |
weaving | target에 advice를 추가해서 proxy를 생성하는 것 |
📌 Advice의 종류
종류 | 애너테이션 | 설명 |
around advice | @Around | 메서드의 시작과 끝 부분에 추가되는 부가 기능, 가장 강력한 코드, 직업 대상 메서드를 호출하고 결과나 예외 처리 가능 |
before advice | @Before | 메서드의 시작 부분에 추가되는 부가 기능, 코드 실행 자체에 관여 불가 |
after advice | @After | 메서드의 끝 부분에 추가되는 부가 기능, 정상적으로 실행되거나 예외가 발생하거나 상관없이 실행되는 코드 |
after returning | @AfterReturning | 예외가 발생하지 않았을 때, 실행되는 부가 기능 |
after throwing | @AfterThrowing | 예외가 발생했을 때, 실행되는 부가 기능 |
추가로 Advice 설정은 XML와 애너테이션, 두 가지 방법으로 가능한데 요즘은 애너테이션이 더 많이 쓰인다.
📌 Pointcut이란?
advice가 어떤 JointPoint에 결합할지 결정하는 설정이다. 다양한 형태로 선언해서 사용할 수 있는데 일단은 execution만 익히자.
execution(반환타입 패키지명.클래스명.메서드명(매개변수목록)
📌 AOP 사용
AOP 기능을 Spring 프로젝트에서 사용하기 위해선 pom.xml에 dependency를 추가해서 라이브러리를 다운받아야 한다.
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.8</version>
<scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
📚 참고
패스트캠퍼스 강의 <스프링의 정석>
코드로 배우는 스프링 웹 프로젝트
'Dev > Spring' 카테고리의 다른 글
[Java] 지네릭스(Generics) 정리 (0) | 2022.04.07 |
---|---|
[Spring] @Transactional 정리 (0) | 2022.04.03 |
[Spring] Log4Jdbc Log4j2 설정 방법 (0) | 2022.04.01 |
[IntelliJ] 이클립스 스프링 프로젝트 인텔리제이로 여는 방법 (0) | 2022.03.26 |