spring 성명 식 사무 관리 상술
1.사무 대리 공장 bean 방식,각각 service 류 에 하나의 대리 류 를 설정 합 니 다.
2.사무 대리 공장 bean 방식 은 하나의 사무 관리 추상 대리 bean 을 정의 하고 모든 단독 service 류 가 대리 류 를 설정 할 때 이 추상 류 를 실현 한다.
3.bean Name 을 사용 하여 자동 으로 트 랜 잭 션 에이 전 트 를 만 드 는 것 을 차단 합 니 다.사용 하 는 클래스:org.springframework.transaction.interceptor.TransactionInterceptor
org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator
4.트 랜 잭 션 에이전트 자동 생 성 대형 프로젝트 에 대해 서 는 이 하 나 를 우선 선택한다.
Spring 도 성명 식 사무 관 리 를 제공 했다.스프링 AOP 를 통 해 이 뤄 진 것 이다.
Spring 에서 사무 관 리 를 하 는 일반적인 방식 은 AOP(절편 프로 그래 밍)방식 을 이용 하여 일반 자바 류 패 키 징 사무 통 제 를 하 는 것 입 니 다.동적 대 리 를 통 해 이 루어 집 니 다.인터페이스 가 지연 되 고 예화 되 기 때문에 spring 은 이 시간 동안 차단 기 를 통 해 사무 절편 을 불 러 옵 니 다.원 리 는 바로 이 렇 습 니 다.구체 적 인 세부 사항 은 jdk 에서 동적 에이전트 와 관련 된 문 서 를 참고 하 십시오.본 고 는 주로 spring 에서 어떻게 사무 통 제 를 하 는 지 설명 한다.
동적 에이전트 의 중요 한 특징 은 인 터 페 이 스 를 대상 으로 하 는 것 입 니 다.그래서 우리 의 dao 는 동적 대 리 를 통 해 spring 이 업 무 를 인수 하려 면 dao 앞에서 인 터 페 이 스 를 추상 화 해 야 합 니 다.물론 이런 인터페이스 가 없 으 면 spring 은 CGLIB 를 사용 하여 문 제 를 해결 하지만 이것 은 spring 이 추천 하 는 방식 이 아니 기 때문에 토론 하지 않 습 니 다.
대부분의 Spring 사용자 들 은 성명 식 사무 관 리 를 선택 합 니 다.이것 은 응용 코드 의 선택 에 최소한 영향 을 미 치 는 것 이기 때문에 이것 은 비 침입 적 인 경량급 용기 와 관념 이 일치한다.
EJB CMT 와 Spring 성명 식 사무 관리의 유사 성과 차이 점 을 고려 하면 유익 하 다.그들의 기본 적 인 방법 은 비슷 하 다.모두 사무 관 리 를 단독 적 인 방법 으로 지정 할 수 있다.필요 하 다 면 트 랜 잭 션 컨 텍스트 에서 setRollback Only()방법 을 호출 할 수 있 습 니 다.다른 점 은 다음 과 같다.
EJB CMT 가 JTA 에 연결 되 어 있 지 않 고 Spring 성명 식 사무 관 리 는 어떠한 환경 에서 도 사용 할 수 있 습 니 다.설정 파일 만 변경 하면 JDBC,JDO,Hibernate 또는 다른 사무 체제 와 함께 작업 할 수 있 습 니 다.
Spring 은 성명 식 사무 관 리 를 일반 자바 대상 에 적용 할 수 있 습 니 다.예 를 들 어 EJB 와 같은 특수 한 클래스 뿐만 아니 라
Spring 제공 성명 식
스크롤 백 규칙:EJB 는 대응 하 는 특성 이 없습니다.우 리 는 아래 에서 이 특성 을 토론 할 것 입 니 다.스크롤 백 은 프로 그래 밍 만 하 는 것 이 아니 라 성명 식 으로 제어 할 수 있다.
Spring 은 AOP 를 통 해 트 랜 잭 션 을 맞 출 수 있 습 니 다.예 를 들 어 필요 하 다 면 트 랜 잭 션 스크롤 백 에 맞 춤 형 행동 을 삽입 할 수 있 습 니 다.너 도 업무 통지 처럼 임의의 통 지 를 추가 할 수 있다.EJB CMT 를 사용 하면 setRollbackOnly()를 사용 하 는 것 외 에 용기 의 사무 관리 에 영향 을 줄 수 있 는 방법 이 없습니다.
Spring 은 고급 응용 서버 가 제공 하 는 원 격 호출 을 뛰 어 넘 는 트 랜 잭 션 컨 텍스트 전 파 를 제공 하지 않 습 니 다.이러한 특성 이 필요 하 다 면 EJB 를 사용 하 는 것 을 추천 합 니 다.그러나 이런 특성 을 쉽게 사용 하지 마라.일반적으로 우 리 는 업무 가 원 격 호출 을 뛰 어 넘 기 를 바라 지 않 는 다.
스크롤 백 규칙 의 개념 은 매우 중요 하 다.그들 은 우리 로 하여 금 어떤 이상 이 자동 으로 스크롤 백 을 해 야 하 는 지 지정 할 수 있 게 한다.자바 코드 가 아 닌 설정 파일 에서 성명 으로 지정 합 니 다.따라서,비록 우 리 는 여전히 TransactionStatus 대상 의 setRollback Only()방법 을 프로 그래 밍 하여 현재 업 무 를 되 돌 릴 수 있 지만,대부분 은 MyApplication Exception 과 같은 규칙 을 지정 할 수 있 습 니 다.업무 대상 이 사무 인 프 라 에 의존 할 필요 가 없다 는 뚜렷 한 장점 이 있다.예 를 들 어 Spring API,사무 또는 다른 어떤 것 도 도입 할 필요 가 없다.
EJB 의 기본 행동 은 만 남 입 니 다.
시스템 이상(보통 실행 중 이상),EJB 용기 자동 스크롤 백 작업.EJB CMT 만 남
응용 프로그램 이상(제외)
java.rmi.RemoteException 이외 의 checked 이상)시 자동 으로 스크롤 백 되 지 않 습 니 다.Spring 성명 식 사무 관 리 는 EJB 의 약속(unchecked 이상 자동 스크롤 백)을 따 르 지만 맞 춤 형 제작 이 가능 합 니 다.
우리 의 테스트 에 따 르 면 Spring 성명 식 사무 관리의 성능 은 EJB CMT 보다 낫다.
보통 TransactionProxy Factory Bean 을 통 해 Spring 사무 대 리 를 설정 합 니 다.우 리 는 목표 대상 을 사무 대리 에 포장 해 야 한다.이 대상 은 보통 자바 대상 의 bean 입 니 다.TransactionProxy Factory Bean 을 정의 할 때,PlatformTransactionManager 에 대한 인용 과
사무 속성.
트 랜 잭 션 속성 은 위 에서 설명 한 트 랜 잭 션 정 의 를 포함 합 니 다.
<bean id="petStore"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target"><ref bean="petStoreTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED,-MyCheckedException</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
트 랜 잭 션 에이전트 가 대상 의 인 터 페 이 스 를 실현 합 니 다.여 기 는 id 가 petStoreTarget 인 bean 입 니 다.(CGLIB 를 사용 해도 구체 적 인 종류의 에이 전 트 를 실현 할 수 있다.proxy TargetClass 속성 을 true 로 설정 하면 됩 니 다.대상 이 인 터 페 이 스 를 실현 하지 않 으 면 이 속성 을 true 로 자동 으로 설정 합 니 다.일반적으로 우 리 는 클래스 프로 그래 밍 이 아 닌 인 터 페 이 스 를 원 합 니 다.)프 록 시 인터페이스 속성 을 사용 하여 사무 에이 전 트 를 한정 하여 인 터 페 이 스 를 지정 하 는 것 도 가능 합 니 다.(일반적으로 좋 은 생각 입 니 다.)org.springframework.aop.framework.ProxyConfig 에서 계승 하거나 모든 AOP 대리 공장 에서 공유 하 는 속성 을 통 해 TransactionProxyFactory Bean 의 행 위 를 맞 출 수 있 습 니 다.
이 곳 의 transaction Attributes 속성 은 org.spring from work.transaction.interceptor.NameMatch TransactionAttributeSource 의 속성 형식 으로 정 의 됩 니 다.이 어댑터 를 포함 하 는 방법의 명칭 매 핑 은 매우 직관 적 이다.insert*의 맵 값 은 스크롤 백 규칙 을 포함 합 니 다.추 가 된-my Checked Exception 은 방법 이 MyChecked Exception 이나 하위 클래스 를 던 지면 자동 으로 스크롤 백 됩 니 다.여러 개의 스크롤 백 규칙 을 쉼표 로 구분 할 수 있 습 니 다.
-접두사 강제 스크롤 백,+접두사 지정 제출(unchecked 이상 을 던 져 도 업 무 를 제출 할 수 있 습 니 다.물론 자신 이 무엇 을 하고 있 는 지 알 아야 합 니 다).
TransactionProxy Factory Bean 은'preInterceptors'와'post Interceptors'속성 설정'앞'또는'뒤'알림 을 통 해 추가 차단 행 위 를 제공 할 수 있 습 니 다.임의의 수량의"전"과"후"알림 을 설정 할 수 있 습 니 다.이들 의 유형 은 Advisor(하나의 접근 점 을 포함 할 수 있 습 니 다),MethodInterceptor 또는 현재 Spring 설정 에 의 해 지원 되 는 알림 형식(예 를 들 어 Throw Advice,AfterReturningt Advice 또는 BeforeAdvice 등)일 수 있 습 니 다.이 알림 들 은 인 스 턴 스 공유 모드 를 지원 해 야 합 니 다.트 랜 잭 션 프 록 시 팩 터 리 빈 이 아 닌 고급 AOP 기능 이 필요 하 다 면 일반적인 org.spring from work.framework.Proxy Factory Bean 을 사용 하 는 것 이 좋 습 니 다.
자동 프 록 시 설정 도 가능 합 니 다.AOP 프레임 워 크 를 설정 하고 별도의 프 록 시 정의 클래스 가 필요 하지 않 아 도 클래스 의 프 록 시 를 생 성 할 수 있 습 니 다.
두 개의 spring 트 랜 잭 션 설정 예 를 추가 합 니 다:
PROPAGATION_REQUIRES_NEW, -MyException
주:위의 뜻 은 add 방법 이 하나의 사 무 를 독점 할 것 입 니 다.업무 처리 과정 에서 MyException 이상 이 발생 하거나 이 이상 한 하위 클래스 가 다시 굴 러 갈 것 입 니 다.
PROPAGATION_SUPPORTS, ISOLATION_READ_COMMITED, Readonly
주:loadAll 방법 은 사 무 를 지원 하고 제출 하지 않 은 데 이 터 를 읽 지 않 습 니 다.그것 의 데 이 터 는 읽 기 전용 입 니 다.(이렇게 하면 읽 기 성능 을 향상 시 키 는 데 도움 이 됩 니 다)
A Spring 의 모든 트 랜 잭 션 정책 첨부
PROPAGATION_MANDATORY
PROPAGATION_NESTED
PROPAGATION_NEVER
PROPAGATION_NOT_SUPPORTED
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED_NEW
PROPAGATION_SUPPORTS
B Spring 의 모든 격 리 정책 첨부:
ISOLATION_DEFAULT
ISOLATION_READ_UNCOMMITED
ISOLATION_COMMITED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.