Spring 관리 업무 의 몇 가지 방식

3896 단어 springAOPHibernate
Hibernate 가 사용 하 는 데이터 원본 Datasource, Hibernate 의 Session Factory 인 스 턴 스, 사무 관리자 Hibernate TransactionManager 를 모두 Spring 관리 에 맡 깁 니 다.
1. 업무 의 네 가지 특성:
   원자 성: 하나의 업무 에서 데이터 베 이 스 를 조작 하 는 것 은 분리 할 수 없 는 작업 서열 입 니 다. 모두 하거나 모두 합 니 다.
   일치 성: 데이터 가 업무 수행 으로 인해 파괴 되 지 않 습 니 다.
   격 리 성: 다른 트 랜 잭 션 (프로 세 스) 의 방 해 를 받 지 않 는 트 랜 잭 션 의 실행.동시에 실 행 된 사무 간 에는 서로 간섭 하지 않 는 다.
   지속 성: 하나의 업무 가 제출 되면 데이터베이스 에 대한 변 화 는 영구적 입 니 다.
2. 업무 의 실현 방식:
실현 방식 은 모두 두 가지 가 있다. 인 코딩 방식, 성명 식 사무 관리 방식 이다.
AOP 기술 을 바탕 으로 이 루어 진 성명 식 사무 관 리 는 실질 적 으로 방법 집행 전후 에 차단 한 다음 에 목표 방법 이 시작 되 기 전에 사 무 를 만 들 고 가입 하 며 목표 방법 을 실행 한 후에 집행 상황 에 따라 제출 하거나 스크롤 백 하 는 것 이다.
성명 식 사무 관 리 는 두 가지 방식 이 있 습 니 다. XML 프로필 을 기반 으로 하 는 방식 입 니 다.다른 하 나 는 업무 방법 에 있어 서 @ Transactional 주 해 를 하고 업무 규칙 을 업무 논리 에 적용 하 는 것 입 니 다 (일반적으로 service 층 으로 정 합 니 다).
첫 번 째 종류:
설명 설정 을 사용 하여 spring. xml 파일 에 다음 두 줄 의 코드 를 추가 합 니 다.

<!--   annotation         -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--      -->
<bean id="transactionManager"   class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>

OK, 설정 이 완료 되 었 습 니 다. 다음 에 업무 가 필요 한 방법 이나 클래스 에서 만 업 무 를 정의 하면 됩 니 다.
< tx: annotation - driven > 이 설정 은 spring 에 게 용기 의 모든 클래스 차원 이나 방법 차원 에서 주 해 를 설정 하 는 것 을 알려 줍 니 다.
두 번 째:
Aop 과 Tx 를 사용 하 는 방식 입 니 다.

    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="create*" propagation="REQUIRED" />
            <tx:method name="insert*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="merge*" propagation="REQUIRED" />
            <tx:method name="del*" propagation="REQUIRED" />
            <tx:method name="remove*" propagation="REQUIRED" />
            <tx:method name="put*" propagation="REQUIRED" />
            <tx:method name="use*" propagation="REQUIRED"/>
            <!--hibernate4             getCurrentSession()    -->
            <tx:method name="get*" propagation="REQUIRED" read-only="true" />
            <tx:method name="count*" propagation="REQUIRED" read-only="true" />
            <tx:method name="find*" propagation="REQUIRED" read-only="true" />
            <tx:method name="list*" propagation="REQUIRED" read-only="true" />
            <tx:method name="*" read-only="true" />
        </tx:attributes>
    </tx:advice>
    <aop:config expose-proxy="true">
        <!--             -->
        <aop:pointcut id="txPointcut" expression="execution(* cn.javass..service..*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>

좋은 웹페이지 즐겨찾기