티스토리 뷰
반응형
관점 지향 프로그래밍
관점
에 집중한 이 개념은 특수한 기능이 아닌 개발자가 하나의 로직에 집중할 수 있도록 별도의 로직을 개설하는 과정의 개념으로 볼 수 있다.
쉽게 요리는 요리사가 미식은 미식가가 하는 것과 같은 것이다.
물론 미식가가 요리를 할 수 있지만 먹는 행위
를 하는 것에 집중하는 것이 좋은 리뷰를 남길 수 있을 것이다.
비즈니스 개발에서는 다음과 같이 볼 수 있다.
Spring Application
은 특별한 경우를 제외하고 MVC 웹 어플리케이션 에서는 Web Layer
/ Business Layer
/ Data Layer
로 정의한다.
- Web Layer
- REST API를 제공하며, Client 중심의 로직 적용
- Business Layer
- 내부 정책에 따른 logic를 개발하며, 주로 해당 부분을 개발
- Data Layer
- 데이터 베이스 및 외부와의 연동을 처리
AOP
는 이러한 목표 아래 탄생한 개념인 것이다.
횡단 관심사
다수의 모듈에 공통적으로 나타나는 부분이 존재하며, 우리는 이것을 횡단 관심사 라고 말한다.
이러한 관심사들 사이에 개발자가 목적을 가지고 임의적으로 코드를 주입할 수 있는데 여기서 등장하는 개념이 AOP
인 것이다.
스프링 DI가 의존성 주입이라면, 스프링 AOP는 로직의 주입이라고 볼 수 있다.
책, 스프링 입문을 위한 자바 객체 지향의 원리와 이해
AOP 예제
//TODO: 관점 클래스 선언
@Aspect
@Component
public class ParameterAop {
@Pointcut("execution(특정 클래스 혹은 메소드)")
private void cut() {
}
@Before("cut()")
public void before(Jointposint jointposint) {
//TODO: 메소드 이름 출력 : 실행되는 메소드의 특정 지점을 찾아낼때 학인하는 방법
MethodSignature methodSignature = (MethodSignature)jointposint.getSignature();
Method method = methodSignature.getMethod();
System.out.println(method);
//TODO: @Pointcut이 지정한 메소드가 실행되기 전에 현재 메소드가 실행됨
Object[] args = jointposint.getArgs();
for (Object obj : args) {
System.out.println("before 메소드가 실행됩니다.");
System.out.println("type: " + obj.getClass().getSimpleName());
System.out.println("value: " + obj);
}
}
@AfterReturning(value = "cut()", returning = "object")
public void after(Jointposint jointposint, Object object) {
//TODO: @Pointcut이 지정한 메소드가 실행된 이후 현재 메소드가 실행됨
System.out.println("after 메소드가 실행됩니다.");
System.out.println("return 오브젝트: ");
System.out.println(object);
}
}
@RestController
@RequestMapping("/api")
public class RestApiController {
@GetMapping("/get/{id}")
public String get(@PathVariable Long id, @RequestParam String name) {
System.out.println("get method 실행!");
return id + " " + name;
}
@PostMapping("/post")
public User post(@RequestBody User user) {
System.out.println("post method 실행!");
return user;
}
}
Reference
반응형
'SPRING 🍃 > Basic' 카테고리의 다른 글
Spring DI - 여러가지 방법 편 (0) | 2022.04.17 |
---|---|
Spring AOP의 용어 (0) | 2022.04.16 |
Spring ICO / DI - 의존성 주입 편 (0) | 2022.04.14 |
Gradle 과 Maven 차이 (0) | 2022.04.07 |
Spring을 다루기전 알고가야할 IOC와 DI (0) | 2022.02.28 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Solid
- CS
- springboot
- 매트랩
- Spring
- kakao
- 수학
- 디자인패턴
- 자격증
- 알고리즘
- 프로그래머스
- spring-cloud
- 릿코드
- nginx
- 면접
- OOP
- Matlab
- C언어
- 그래프
- 자바
- security
- 스프링
- java
- 스프링부트
- interview
- ajax
- JPA
- docker
- Algorithm
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함