Skip to content

Instantly share code, notes, and snippets.

@nephilim
Created June 17, 2011 04:53
Show Gist options
  • Save nephilim/1030892 to your computer and use it in GitHub Desktop.
Save nephilim/1030892 to your computer and use it in GitHub Desktop.
토비의스프링3 6장 4절~5절

6.4

  • 수동 프록시

    • JDK Proxy
      • Proxy.newProxyInstance()
      • new로는 생성 안됨-> 기존의 getBean()으로는 안됨
    • 결론: FactoryBean을 이용해 빈 생성 제어에 관여해야함
  • ProxyFactoryBean

    • ex: TxProxiedParcelDelivertServiceFactoryBean

    • MethodInterceptor에서 직접 적용 타켓을 필터링했음

      • 재사용성을 높이려면 ProxyFactoryBean에 적용 대상 class, method 필터링이 설정되면 안됨.
    • Pointcut: '메서드 필터'라 생각하자

      • ex: NameMatchMethodPointcut(spring 제공)

      • 설정 예시

          <bean id="transactionPointcut" 
          		class="org.springframework.aop.support.NameMatchMethodPointcut">
          	<property name="mappedName" value="receiptAll"/>
          </bean>
        
    • Advice: '부가 기능'

      • implements MethodInterceptor
      • 참고: JDK Proxy에서는 java.lang.reflect.InvocationHandler를 사용했음
      • MethodInterceptor의 발생 예외는 (InvocationHandler와는 달리) 포장되지 않음
        • InvocationHandler는 타켓 클래스의 예외를 InvocationTargetException으로 포장함
    • Advisor = Advice + Pointcut

      • DefaultPoincutAdvisor(spring 제공)

      • ProxyFactoryBean 등록 시 interceptorNames 프로퍼티를 이용해 advisor를 등록한다

      • ProxyFactoryBean 설정 예시

          <bean id="parcelService" class="org.springframework.aop.framework.ProxyFactoryBean">
          	<property name="target" ref="parcelServiceImpl"/>
          	<property name="interceptorNames">
          		<list>
          			<value>txAdivsor</value>
          		</list>
          	</property>
          </bean>
        
    • 결국, target 별로 ProxyFactoryBean을 만들어 줘야한다는 한계는 남아 있음

6.5

  • DefaultAdvisorAutoProxyCreator

    • BeanPostProcessor의 일종: application context에서 빈 등록 후 수행됨

    • 등록된 빈 중 Advisor를 모두 조사해 자동으로 대상을 Proxing 한다.

    • id 등록 필요없음

        <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
      
    • 클래스 필터링을 강화한 pointcut 클래스 제작

      • NameMatchMethodAndClassPointcut
      • PatternMatchUtils.simpleMatch 활용: * 포함 매칭식을 편리하게 검증
  • Q(질문?)

    • 리스트 6-51: static inner class 와 그냥 inner class의 차이?
      • InnerClassTest 참고

6.5.3

6.5.6

  • AOP

    • 정의: separation of cross-cutting concerns 개념을 구체화한 것임
    • 토스3의 그림 6-21 보다는 다음의 링크를 편안하게 읽어본다.
    • 활용: 보안, 로깅, 트랜잭션 ...
  • AOP 용어

    1. pointcut: 필터, 혹은 선별 작업의 개념
    2. join point: advice의 결합 위치. 스프링 AOP에는 메서드 실행(exection)뿐이다.
    3. aspect: 고도화된 advisor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment