6.5 간결한 프록시 정의 by sh
6.5. 간결한 프록시 정의
특히 트랜잭션 프록시를 정의 할 때, 많은 유사한 프록시 정의로 끝날 수 있습니다. 부모 bean 정의와 자식 bean 정의를 inner bean 정의와 함께 사용하면 훨씬 명확하고 간결한 proxy 정의가 될 수 있습니다.
먼저 다음과 같이 프록시에 대한 부모, 템플릿, bean 정의를 작성합니다.
TransactionProxyFactoryBean : 트랜잭션을 처리하는 프록시를 생성해주는 클래스
프로퍼티 목록
transactionManager : 트랜잭션 관리자 설정
transactionAttributes : 트랜잭션 속성을 설정할 때 사용되는 Properties 객체를 설정
key : 트랜잭션을 적용할 메서드 이름을 설정
<prop> 태그 값 형식 : PROPAGATION_NAME, ISOLATION_NAME, readOnly, timeout, +Exception1, -Exception2
PROPAGATION_NAME (필수항목) : 트랜잭션 전파 규칙
ISOLATION_NAME : 트랜잭션 격리 레벨
readOnly : 트랜잭션을 읽기 전용으로 설정
timeout : 트랜잭션의 타임 아웃 시간을 초 단위로 설정
롤백 규칙 : +, -를 사용하여 설정.
+ : 해당 예외가 발생하더라도 커밋 수행
- : 롤백 수행
[참고사이트] http://blog.naver.com/PostView.nhn?blogId=tyboss&logNo=70035299782&redirect=Dlog&widgetTypeCall=true
이것은 결코 인스턴스화되지 않으므로 실제로 불완전 할 수 있습니다. 그런 다음, 생성되어야하는 각 프록시는 자식 빈 정의이며, 프록시의 대상을 내부 빈 정의로 래핑합니다. 대상은 결코 자체적으로 사용되지 않기 때문입니다. 다음 예제는 그러한 하위 bean을 보여줍니다.
부모 템플릿에서 속성을 재정의 할 수 있습니다. 다음 예제에서는 트랜잭션 전파 설정을 재정의합니다.
부모 bean 예제에서 우리는 앞서 설명 된 것처럼 abstract
속성을 true
로 설정하여 부모 Bean 정의를 추상으로 명시 했으므로 실제로 인스턴스화되지 않을 수 있습니다. 애플리케이션 컨텍스트 (단순 bean 팩토리는 제외)는 기본적으로 모든 싱글 톤을 미리 인스턴스화합니다. 따라서 최소한 (싱글 톤 bean의 경우) 템플릿으로만 사용하려는 (상위) Bean 정의가 있고 이 정의가 클래스를 지정하는 경우, abstract
속성을 다음과 같이 true
로 설정해야합니다. 그렇지 않으면 응용 프로그램 컨텍스트가 실제로 사전 인스턴스화를 시도합니다.
txProxyTemplate 빈은 abstract = "true"로 설정되어 직접적으로 사용 불가능!
실질적으로 트랜잭션을 처리하는 컴포넌트들에서 이 빈을 사용한다.
Last updated