# 6.5简介的代理定义

特别是当你对transactional代理下定义时，你可以用大量类似的代理定义来结束。父类和子类bean，内部bean都可以实现更加干净和简洁的代理定义。

首先，我们为代理创建一个父类模板定义，如下所示：

```markup
<bean id="txProxyTemplate" abstract="true"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="transactionAttributes">
        <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>
```

上面的类并没有实例化，所以他并不是完整的。然后每个需要被创建的代理都是它的子类，它包装了定义为内部类的代理target，因为该target不会以他自己的方式使用。下面是一个子类的例子：

```markup
<bean id="myService" parent="txProxyTemplate">
    <property name="target">
        <bean class="org.springframework.samples.MyServiceImpl">
        </bean>
    </property>
</bean>
```

你可以覆盖父类的属性，如下所示：

```markup
<bean id="mySpecialService" parent="txProxyTemplate">
    <property name="target">
        <bean class="org.springframework.samples.MySpecialServiceImpl">
        </bean>
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="store*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>
```

注意在父类的例子中，我们显示的设置abstract为true，如上面所示，所以他并没有被初始化，Application contexts（而不是简单的bean factories），会默认初始化所有的singletons。因此，如果你有一个父bean的定义，你打算只把他作为模板，并且他是一个类，那么你必须将他的abstract属性设置为true。否则application context 会尝试预先实例化他。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.flydean.com/spring-framework-documentation5/core-technologies/6.spring-aop-apis/6.5concise-proxy-definitions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
