[Spring] 0716 정리

charco·2021년 7월 16일
0

토비스프링

목록 보기
5/11

스프링은 지정된 클래스 이름을 가지고 리플렉션을 이용해서 해당 클래스의 오브젝트를 만듦.

* Class의 newInstance() - > 기본 생성자 호출 후 오브젝트 돌려줌 (빈이 기본생성자가 있어야 하는 이유)

  • Factory Bean -> 스프리을 대신해 오브젝트의 생성 로직을 담당하도록 만들어진 특별한 빈. Factory Bean의 구현체가 빈으로 등록되면 getObject() 메소드를 통해 오브젝트를 가져오고 그 오브젝트를 빈으로 씀. Factory Bean은 빈 오브젝트를 생성하는 과정에서만 사용함.
  • 스프링은 수정자 메소드의 파라미터 타입을 확인해서 프로퍼티의 타입이 Class인 경우는 value로 설정한 이름을 가진 Class 오브젝트로 자동 변환해줌
  • Factory Bean

    출처 https://babtingdev.tistory.com/311

java.lang.reflect.Proxy 객체는 스태틱 메서드로만 오브젝트를 생성할 수 있기 때문에 스프링의 Factory Bean 을 이용해 DI 방식으로 Proxy 적용

FactoryBean -> Dynamic Proxy 생성 -> InvocationHandler 호출 -> 타겟 메서드 제어

범용적으로 부가기능 사용이 가능해짐

  • 프록시 팩토리 빈의 한계
    한번에 여러개의 클레스에 공통적인 부가기능 제어 못함.
    같은 타깃에 여러개의 부가기능 제공 못함
    따라서 최악의 경우 클래스 수 x 부가기능 수 만큼 설정파일의 줄이 길어질 수 잇음. 비슷한 설정이 반복됨

  • Spring ProxyFactoryBean -> 프록시를 생성해 빈으로 등록하게 해주는 팩토리 빈. 일관된 방법으로 프록시를 만들 수 있게 도와주는 추상레이어 제공.
    순수하게 프록시를 생성하는 작업만 담당.

  • MethodInterceptor(Advice의 서브인터페이스) -> ProxyFactoryBean 이 생성하는 프록시에서 사용할 부가기능. jdk 의 InvocationHandler와 비슷하지만 ProxyFactoryBean으로부터 타깃 오브젝트에 대한 정보를 함께 제공받는다는 것이 다르다. 아래 장점

  • Advice -> 타깃 오브젝트에 적용하는 부가기능을 담은 오브젝트.
    타깃에 종속되지 않음. 순수하게 부가기능만 담음.

  • ProxyFactoryBean은 작은 단위의 템플릿/콜백 구조로 응용해서 적용함.
    -> 템플릿 역할을 하는 MethodInvocation 을 싱글톤으로 두고 공유
    타깃의 인터페이스를 자동으로 검출한다.
    기본적으로 jdk의 다이내믹 프록시로 만들어줌.

  • CGLib -> 오픈소스 바이트코드 생성 프레임워크

  • Advice -> 부가기능을 제공하는 오브젝트

  • Pointcut -> 메소드 선정 알고리즘을 담은 오브젝트
    위 두개는 여러 프록시에서 공유 가능
    싱글톤 빈으로 등록 가능

  • Advisor = Pointcut + Advice

  • 중복 문제의 접근 방법 -> 런타임 시 다이내믹하게 연결

  • 빈 후처리기 (BeanPostProcessor)
    스프링 빈 오브젝트로 만들어지고 난 후에 빈 오브젝트를 다시 가공할 수 있게 해줌.

  • DefaultAdvisorAutoProxyCreator(자동 프록시 생성기)

  • 빈으로 static 클래스를 등록할때는 클래스&스태틱클래스

  • bean 태그의 parent 애트리뷰트 ->
    parent 대상의 설정을 그대로 가져와서 사용
    프로퍼티 설정까지 모두 상속받음

  • 포인트컷 표현식 AspectJExpressionPointcut.setExcpression(표현식)

  • AOP란? 애스펙트 지향 프로그래밍
    애스펙트는 부가기능을 담고있는 모듈
    ex) Spring 의 Advisor
    핵심 기능에서 부가 기능을 분리해서 Aspect라는 독특한 모듈로 만들어
    설계하고 개발하는 방법

AspectJ -> 클래스가 JVM에서 로딩되는 시점을 가로채 바이트코드 조작

  • 용어정리
    타깃 -> 부가기능을 부여할 대상
    어드바이스 -> 타깃에게 제공할 부가기능을 담은 모듈
    조인포인트 -> 어드바이스가 적용될 수 있는 위치 (메서드 시작점)
    포인트컷 -> 어드바이스로 적용할 조인포인트를 선별하는 기능을 정의하는 모듈
    프록시 -> 클라이언트와 타깃 사이에 투명하게 존재하면서 부가기능을 제공하는 오브젝트. DI를 통해 타깃 대신 클라이언트에게 주입됨. 클라이언트 메소드 호출을 대신 받아서 타깃에 위임
    어드바이저 -> 자동 프록시 생성기가 어드바이저를 AOP 작업의 정보로 활용
    애스펙트 -> AOP의 기본 모듈. OOP의 클래스와 마찬가지
    싱글톤 형태의 오브젝트로 존재

  • 스프링의 프록시 방식 AOP를 적용할때 필요한 4가지 빈
    DefaultAdvisorAutoProxyCreator -> 독립적으로 존재 (bean 태그의 id 애트리뷰트 필요 없음) 포인트컷을 참고해 빈을 프록시로 자동 생성
    Advice -> MethodInterceptor
    Pointcut -> AspectJExpressionPointcut 에 표현식을 넣는다
    Advisor -> 자동 프록시 생성기에 의해 자동 검색

profile
아직 배우는 중입니다

0개의 댓글