김영한 강의듣고 메모
프록시를 타도록 의도했지만, 자기 내부 함수를 호출하면 → 해당 함수는 프록시를 거치지않음
자신을 호출하는 경우 → 프록시를 거치지 않음
외부에서 호출할때만 프록시를 거쳐서 실행된다.
이런 문제를 해결하는 방법? → aspectj를 사용하면 이런 문제가 발생하지 않음 → 코드에 직접 박히기 떄문( aspectj는 실제로 코드 주입)
- 자기 자신을 주입하는 것? → setter 주입(생성/주입 단계가 분리되어 있어서, setter 주입을 하면좋다...)
- → 지연 조회 → application context로 자신을 호출함, 또는 ObjectProvider
- 구조 변경 → (가장 권장됨) 호출되는 클래스 분리(내부함수호출을 하지않음) ( 다양한 방법이 있을 수 있음) client →1 → 2 구조에서 client →1, client →2 로 바꿀수도 있음
프록시 기술들의 한계
jdk 프록시 - 인터페이스 필수, 구체클래스의 경우 사용할 수 없다.
cglib 프록시 - 구체 클래스 기반, 기본생성자 필수, 생성자 2번 호출 문제, final 키워드 클래스, 메서드 사용불가(final 키워드가 있으면, 상속이 안되므로)
스프링의 대안 - cglib을 기본으로 패키지, 기본 생성자 필수 문제 해결, 생성자 2번 호출문제(objenesis)라는 라이브러리로 해결
'공부기록 > 인터넷 강의' 카테고리의 다른 글
mvc2편 및 고급편 (0) | 2022.02.20 |
---|---|
프록시 데코레이터 (0) | 2022.02.10 |
템플릿 메서드 패턴과 전략, 콜백 (0) | 2022.02.06 |
RestFul (0) | 2021.11.20 |
생활코딩 OAuth 정리 (0) | 2021.10.26 |