728x90
7.AOP
목차
- 1.AOP가 필요한 상황
- 2.AOP적용
1.AOP가 필요한 상황
모든 메소드의 호출시간을 측정하고 싶다면?
공통관심사항 vs 핵심관심사항
회원가입시간 , 회원조회시간을 측정하고 싶다면?
#### join
```
@Transactional
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
public Long join(Member member){
long start = System.currentTimeMillis();
try {
validateDuplicateMember(member); //중복 회원 검증
memberRepository.save(member);
return member.getId();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("join " + timeMs + "ms");
}
//...
}
}
```
일일이 다넣어줘야 된다..
유지봇가 어렵다
시간을 측정하는 로직은 공통의 로직이지만 별도로 만들기 어렵다
일일이 찾아가면서 변경을 해줘야한다..
2.AOP적용
공통관심사항과 핵심관심사항을 분리한다
#### TimeTraceAop
```
@Aspect
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..)) && !target(hello.hellospring.SpringConfig)")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString()+ " " + timeMs + "ms");
}
}
}
```
@Around("execution(* hello.hellospring..*(..))") 패키지명 하위에는 다적용
@Around 코드를 보면 SpringConfig의 timeTraceAop() 메서드도 AOP로 처리하게 된다 그래서 자기자신의 TimeTraceAop를 생성하는 코드가된다(순환참조문제)
@Around("execution(* hello.hellospring..*(..)) && !target(hello.hellospring.SpringConfig)") AOP대상에서 SpringConfig를 빼준다
#### SpringConfig
```
@Configuration
public class SpringConfig {
@Bean
public TimeTraceAop timeTraceAop(){
return new TimeTraceAop();
}
```
SpringConfig 에다가 TimeTraceAop 빈을 새로 만들어준다
![image](https://user-images.githubusercontent.com/65409092/103253669-724d8500-49c5-11eb-94a4-e6a60c825be0.png)
공통관심 사항을 분리
원하는 적용대상을 선택할수 있다
변경이 필요하면 TimeTraceAop 변경
핵심 관심사항을 깔끔하게 유지할수 있다!
728x90
'Back-End > Spring' 카테고리의 다른 글
2.스프링 핵심 원리 이해1 - 예제만들기 (0) | 2020.12.31 |
---|---|
1.객체지향설계와 스프링 (0) | 2020.12.30 |
6.스프링 DB접근기술 (0) | 2020.12.29 |
5.순수 JDBC 접근기술 (0) | 2020.12.28 |
4.회원 관리 예제 - 웹 MVC개발 (0) | 2020.12.28 |