프록시 AOP 실무주의사항 문제1 해결법

justindevcode·2024년 4월 12일
0

스프링 AOP

목록 보기
1/22
post-thumbnail
post-custom-banner

프록시 AOP 실무주의사항 문제1 해결법

가장 권장하는 해결법

@Slf4j
@Component
@RequiredArgsConstructor
public class CallServiceV3 {
 private final InternalService internalService;
 public void external() {
 log.info("call external");
 internalService.internal(); //외부 메서드 호출
 }
}



@Slf4j
@Component
public class InternalService {
 public void internal() {
 log.info("call internal");
 }

그냥 아까 내부함수 호출하는쪽으로 새로운 클래스로 뽑아서 새로 만든다. 이것이 가장 권장하는방법이다.
또는 클라이언트 쪽 한칸 뒷단계에서 external호출 -> internal호출 2줄로 작성할 수도 있긴하다.

권장하지 않는방법

수정자 주입으로 자기자신을 다시 받아서 그 받은거를 callServiceV1.internal(); 사용하는 방법이 있는데 자기자신이기때문에 생성자주입은 안되고 수정자로 사용해야한다.
스프링2.6부터 어떤방식이든 순환참고 금지하는것으로 기본설정되어있다.

2

@Slf4j
@Component
@RequiredArgsConstructor
public class CallServiceV2 {
// private final ApplicationContext applicationContext;
 private final ObjectProvider<CallServiceV2> callServiceProvider;
 public void external() {
 log.info("call external");
// CallServiceV2 callServiceV2 = 
applicationContext.getBean(CallServiceV2.class);
 CallServiceV2 callServiceV2 = callServiceProvider.getObject();
 callServiceV2.internal(); //외부 메서드 호출
 }

스프링 빈 컨테이너에서 직접 꺼내쓰는 코드 방법이 있다. 너무 강제적으로 하는거같아서 좋지않다.

profile
("Hello World!");
post-custom-banner

0개의 댓글