Loading...
Spring Framework Reference Documentation 7.0.2의 Concise Proxy Definitions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
특히 transactional proxy를 정의할 때, 많은 유사한 proxy 정의를 가지게 될 수 있습니다. parent 및 child bean 정의와 inner bean 정의를 함께 사용하면 훨씬 더 깔끔하고 간결한 proxy 정의를 만들 수 있습니다.
먼저, 다음과 같이 proxy를 위한 parent, template, bean 정의를 생성합니다:
1<bean id="txProxyTemplate" abstract="true" 2 class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 3 <property name="transactionManager" ref="transactionManager"/> 4 <property name="transactionAttributes"> 5 <props> 6 <prop key="*">PROPAGATION_REQUIRED</prop> 7 </props> 8 </property> 9</bean>
이는 자체적으로는 절대 인스턴스화되지 않으므로, 실제로는 불완전할 수 있습니다. 그런 다음, 생성해야 하는 각 proxy는 child bean 정의이며, proxy의 target은 inner bean 정의로 감싸집니다. 어차피 target은 단독으로 사용되지 않기 때문입니다.
다음 예시는 이러한 child bean을 보여줍니다:
1<bean id="myService" parent="txProxyTemplate"> 2 <property name="target"> 3 <bean class="org.springframework.samples.MyServiceImpl"> 4 </bean> 5 </property> 6</bean>
parent template로부터 property를 override할 수 있습니다. 다음 예시에서는 transaction propagation 설정을 override합니다:
1<bean id="mySpecialService" parent="txProxyTemplate"> 2 <property name="target"> 3 <bean class="org.springframework.samples.MySpecialServiceImpl"> 4 </bean> 5 </property> 6 <property name="transactionAttributes"> 7 <props> 8 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> 9 <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> 10 <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> 11 <prop key="store*">PROPAGATION_REQUIRED</prop> 12 </props> 13 </property> 14</bean>
parent bean 예시에서, abstract attribute를 true로 설정하여 parent bean 정의가 abstract임을 명시적으로 표시했다는 점에 유의하십시오. 이는 이전에 설명된 대로 실제로는 절대 인스턴스화되지 않을 수 있음을 의미합니다.
애플리케이션 컨텍스트(단순 bean 팩토리는 아님)는 기본적으로 모든 싱글톤을 사전 인스턴스화합니다. 따라서 (적어도 싱글톤 bean의 경우에는) 템플릿으로만 사용할 의도인 (parent) bean 정의가 있고, 이 정의가 클래스를 지정하는 경우, 반드시 abstract attribute를 true로 설정해야 합니다. 그렇지 않으면 애플리케이션 컨텍스트가 실제로 이를 사전 인스턴스화하려고 시도합니다.
Using the ProxyFactoryBean to Create AOP Proxies
Creating AOP Proxies Programmatically with the ProxyFactory