spring 의 사무 설정 약 담

spring 에서 사무 관 리 는 일반적으로 txProxyTemplate 를 설명 한 다음 에 업무 bean 에서 parent = "txProxyTemplate" 를 사용 합 니 다. 이렇게 하면 좀 번 거 로 워 보일 수 있 습 니 다. 또한 업무 bean 에 다른 차단기 가 필요 하 다 면 설정 도 불편 합 니 다. 아래 에 제 설정 을 붙 여 Default Advisor AutoProxyCreator 로 자동 대 리 를 실현 합 니 다.
<beans>
	<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
    <bean id="transactionManager"
          class="org.springframework.orm.hibernate3.HibernateTransactionManager">
          <property name="sessionFactory">
              <ref bean="sessionFactory"/>
          </property>
    </bean>

	<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
    	<property name="transactionManager" ref="transactionManager"/>
		<property name="transactionAttributeSource">
		  <value>
			com.skyon.user.manager.UserManager.*=PROPAGATION_REQUIRED
			#Add new defines here ->
		  </value>
		</property>
	</bean>

	<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>
				<!--
				     Interceptor
				-->
			</list>
		</property>
	</bean>

	<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
	  <property name="transactionInterceptor" ref="transactionInterceptor"/>
	</bean>

</beans>

여기 서 Default Advisor AutoProxy Creator 를 이용 하여 용기 에 있 는 모든 bean 에 대한 자동 대 리 를 실현 합 니 다. 업무 가 필요 한 업무 bean 을 추가 할 때 transaction Interceptor 에 한 줄 만 추가 하면 됩 니 다. 다른 interceptor 를 추가 하 는 것 도 매우 편리 하고 설정 량 을 크게 줄 일 수 있 습 니 다.
com.skyon.user.manager.UserManager.*=PROPAGATION_REQUIRED 는 인터페이스 위 에 위치 시 킬 수 있 습 니 다: com. skyon. user. manager. TransactionAware. * = PROPAGATIONREQUIRED
그러면 TransactionAware 인터페이스 만 실현 하면 용기 사무 관 리 를 받 을 수 있다.
-----------------------------------------------------------------------------------------------------------------
댓 글
제 가 완전 하 게 보충 하 겠 습 니 다. 잘못된 점 이 있 으 면 지적 해 주세요.
Spring 을 설정 하고 Service 층 의 bean 에 대해 사무 처 리 를 합 니 다. 예전 의 방법 은 다음 과 같 습 니 다.
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        ref bean="transactionManager"/>
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="find*">PROPAGATION_REQUIRED, readOnly</prop>
            <prop key="*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

<bean id="userManager" parent="txProxyTemplate">
    <property name="target">
        <bean class="some.package.UserManagerImpl">
            <property name="userDAO"><ref bean="userDAO"/></property>
        </bean>
    </property>
</bean>

이후 새로운 service / manager 를 추가 하면 XML 설정 의 증 가 는 다음 과 같 습 니 다.
<bean id="someOtherManager" parent="txProxyTemplate">
    <property name="target">
        <bean class="some.package.someOtherManagerImpl">
        </bean>
    </property>
</bean>

위 에서 말 한 것 은 낡은 방법 으로 비교적 전통 적 이다.단점 은 증 량 이 많아 코 피 & 패스 트 를 배치 하면 기분 이 좋 지 않 고 비대 하 다 는 것 이다.
다음은 Feiing 이 내 놓 은 더 좋 은 방안 입 니 다. 제 가 수정 한 것 이 있 습 니 다.
<beans>
    <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>

    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="transactionManager"/>?
		<property name="transactionAttributes">
			<props>
				<prop key="*">PROPAGATION_REQUIRED</prop>
				<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
    </bean>

    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <value>*Service,*Manager</value>
        </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
                <!--       Interceptor -->
            </list>
        </property>
    </bean>

    <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
        <property name="transactionInterceptor" ref="transactionInterceptor"/>?
    </bean>

    <bean id="userManager" class="some.package.UserManagerImpl" autoWire="byName"/>

</beans>

이후 매번 의 증 가 는 이 단락 이다.
<bean id="userManager" class="some.package.UserManagerImpl" autoWire="byName"/>

일반 bean 을 설정 하 는 방법 과 마찬가지 로 매우 간결 하고 직관 적 입 니 다.
 저 는 Feiing 의 Default Advisor AutoProxy Creator 를 Bean Name AutoProxy Creator 로 바 꿨 습 니 다. context 의 모든 bean 이 필요 한 일이 아니 라 Service 층 에서 AOP 를 하면 싱가포르 가 될 수 있다 고 생각 합 니 다.
Robbin 은 이렇게 하면 XML 프로필 에 대한 관심 사 분 리 를 실현 하 는 것 이 바람 직 하 다 고 생각 합 니 다! 

좋은 웹페이지 즐겨찾기