6.8 "자동 프록시" 기능 사용 by sh
6.8. "자동 프록시" 기능 사용
지금까지 우리는 ProxyFactoryBean
이나 비슷한 factory bean을 사용하여 AOP 프록시를 명시적으로 생성하는 것을 고려했습니다.
Spring은 또한 자동으로 선택된 bean 정의를 프록시 할 수있는 "auto-proxy"bean 정의를 사용할 수있게 해줍니다. 이것은 Spring의 "bean post processor"기반 구조를 기반으로하며, 컨테이너가 로드 될 때 모든 bean 정의를 수정할 수 있습니다.
이 모델에서는 XML bean 정의 파일에 몇 가지 특수 bean 정의를 설정하여 자동 프록시 인프라를 구성합니다. 이를 통해 자동 프록시에 적합한 대상을 선언 할 수 있습니다. ProxyFactoryBean
을 사용할 필요가 없습니다.
이 작업에는 두 가지 방법이 있습니다.
현재 컨텍스트의 특정 Bean을 참조하는 자동 프록시 작성자 사용.
개별적으로 고려해야 만하는 자동 프록시 생성의 특별한 경우 : 소스 레벨 메타 데이터 속성에 의해 구동되는 자동 프록시 생성.
6.8.1. 자동 프록시 Bean 정의
이 섹션에서는 org.springframework.aop.framework.autoproxy
패키지가 제공하는 자동 프록시 생성자에 대해 설명합니다.
BeanNameAutoProxyCreator
BeanNameAutoProxyCreator
클래스는 리터럴 값 또는 와일드 카드와 일치하는 이름을 가진 Bean에 대한 AOP 프록시를 자동으로 만드는 BeanPostProcessor
입니다. 다음 예제에서는 BeanNameAutoProxyCreator
bean을 작성하는 방법을 보여줍니다.
ProxyFactoryBean
과 마찬가지로 프로토 타입 advisor에 올바른 동작을 허용하기 위해 인터셉터 목록이 아닌 interceptorNames
속성이 있습니다. 명명 된 "인터셉터"는 advisor 또는 advice 유형이 될 수 있습니다.
일반적으로 자동 프록시와 마찬가지로 BeanNameAutoProxyCreator
를 사용하는 주된 요점은 최소한의 설정으로 여러 객체에 하나의 설정을 일관성있게 적용하는 것입니다. 선언적 트랜잭션을 여러 객체에 적용하는 데 널리 사용됩니다.
앞의 예에서 jdkMyBean
과 onlyJdk
와 같이 이름이 일치하는 Bean 정의는 대상 클래스가 있는 일반 오래된 bean 정의입니다. AOP 프록시는 BeanNameAutoProxyCreator
에 의해 자동으로 생성됩니다. 동일한 advice가 모든 일치하는 bean에 적용됩니다. 앞의 예에서 인터셉터 대신 advisor가 사용되는 경우, pointcut은 다른 bean에 다르게 적용될 수 있습니다.
DefaultAdvisorAutoProxyCreator
보다 일반적이고 매우 강력한 자동 프록시 작성자는 DefaultAdvisorAutoProxyCreator
입니다. 이는 자동 프록시 advisor의 bean 정의에 특정 bean 이름을 포함시킬 필요없이 현재 컨텍스트에서 적합한 advisor를 자동으로 적용합니다. BeanNameAutoProxyCreator
와 동일한 구성 및 중복 방지와 동일한 장점을 제공합니다.
이 메커니즘을 사용하려면 다음이 필요합니다.
DefaultAdvisorAutoProxyCreator
bean 정의 지정하기.동일한 또는 관련된 컨텍스트에서 임의의 수의 advisor를 지정합니다. 이들은 advisor나 인터셉터나 다른 advice가 아니어야합니다. 이것은 후보 빈 정의에 대한 각 조언의 적격성을 검사하기 위해 평가할 포인트 컷이 있어야하기 때문에 필요합니다.
DefaultAdvisorAutoProxyCreator
는 각 advisor에 포함 된 포인트 컷을 자동으로 평가하여 각 비즈니스 객체 (예 : businessObject1
및 businessObject2
)에 적용해야하는 advice(있는 경우)를 확인합니다.
즉, 다수의 advisor를 각 Business Object에 자동으로 적용 할 수 있습니다. advisor 중 하나에 있는 pointcut이 비즈니스 오브젝트의 메소드와 일치하하는 것이 없다면, 객체는 프록시되지 않습니다. bean 정의가 새 비즈니스 객체에 추가 될 때 필요에 따라 bean 정의가 자동으로 프록시됩니다.
자동 프록시는 일반적으로 호출자 나 종속성이 알려지지 않은 객체를 얻을 수 없게 만드는 이점이 있습니다. 이 ApplicationContext
에서 getBean("businessObject1")
을 호출하면 대상 비즈니스 객체가 아닌 AOP 프록시가 리턴됩니다. (앞에서 설명한 "내부 bean"관용구도이 이점을 제공합니다.)
다음 예제는 DefaultAdvisorAutoProxyCreator
빈과 이 절에서 설명하는 다른 요소를 생성합니다.
DefaultAdvisorAutoProxyCreator
는 동일한 advice를 여러 비즈니스 객체에 일관되게 적용하려는 경우 매우 유용합니다. 인프라 정의가 완료되면 특정 프록시 구성을 포함하지 않고 새 비즈니스 개체를 추가 할 수 있습니다. 또한 구성 변경을 최소화하면서 추가 측면 (예 : 추적 또는 성능 모니터링 측면)을 쉽게 삭제할 수 있습니다.
DefaultAdvisorAutoProxyCreator
는 필터링과 정렬을 지원합니다. (동일한 권고 자만 평가되도록 명명 규칙을 사용하여 다르게 구성되는 AdvisorAutoProxyCreators를 동일한 공장에서 사용할 수 있음) advisor는 org.springframework.core.Ordered
인터페이스를 구현하여 문제가있는 경우 올바른 순서를 지정할 수 있습니다. 앞의 예제에서 사용한 TransactionAttributeSourceAdvisor
는 구성 가능한 order 값을 가집니다. 기본 설정은 순서가 없습니다.
Last updated