그기능이왜생겼나 하는 의문은 멀티스레드랑은 큰 상관이 없습니다.
AOP에 관련한 내용인데 스프링은 AOP 대상 객체의 하위 객체(proxy object)를 동적으로 생성해서 AOP를 적용합니다.
그런데 자기 내부에있는 메서드를 호출하겠다고 this를 때려버리면 proxy 객체가 아닌 AOP가 적용되지않은 정말 자기자신을 호출하기때문에 AOP가 정상적으로 작동하지않습니다.
이를 해결하기위해 this로 접근하는게 아니라 자기자신을 참조(실제로는 자기자신이 아니라 AOP가 적용된 proxy 참조)로 가져 호출하는겁니다.
UserSerivce.java 파일에서
public List<Vo> findByUser() {
getUserName();
}
@Transaction
public String userName(){
repository.insertSomething();
repository.findByUserName();
}
와 같이 메서드에서 트랜잭션(Aop)메서드를 호출할때 문제가 생긴다고 한다. 테스트는 안해봄
이럴 경우 getUserName();이 아니라
자기 자신을 Autowired로 해서 셀프 주입을 받아서 해야한다고 함.
@Autowired
UserService userService;
userService.getUserName();
'코딩 > 자바' 카테고리의 다른 글
스프링부트 알림창 인터셉터로 처리하기 (0) | 2020.07.12 |
---|---|
aws java tomcat nginx 연결 흐름 (0) | 2020.06.21 |
터미널에서 메이븐 빌드하기 (0) | 2020.04.30 |
로컬 스프링 외부에서 접근하기 (0) | 2020.01.24 |
깃 커밋 기록 삭제하고 초기화하기 (0) | 2020.01.21 |