Имеет ли значение порядок при добавлении свойств в ProxyFactoryBean - PullRequest
2 голосов
/ 08 августа 2011

Я пытаюсь внедрить аспекты в сервис.Для этого сервиса я создаю прокси-объект, используя классический способ.

Я написал bean-baseProxy типа (ProxyFactoryBean), который содержит список всех необходимых советов.

    <bean id="baseProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="interceptorNames">
        <list>
            <value>methodInvocationAdvice</value>
        </list>
    </property>
</bean>

Я создаю прокси для службы следующим образом:

<bean id="singproxy" parent="baseProxy">
    <property name="target" ref="singtarget" />
    <property name="targetClass" value="com.spring.learning.SingingService"></property>
</bean>

, который не работает, но когда я возвращаю эти два свойства и пишу так:

<bean id="singproxy" parent="baseProxy">
    <property name="targetClass" value="com.spring.learning.SingingService"></property>
    <property name="target" ref="singtarget" />
</bean>

К моему удивлениюработает отлично.Весной ли это имеет значение для заказа бобов?Или это особый случай с ProxyFactoryBean?Я пытался с Spring 3.0, я не уверен, что такое же поведение существует с предыдущими версиями.

1 Ответ

1 голос
/ 08 августа 2011

Относительно target и targetClass, это одно или другое, но не оба.Вот соответствующий источник (из org.springframework.aop.framework.AdvisedSupport), родительский класс ProxyFactoryBean:

public void setTarget(Object target) {
    setTargetSource(new SingletonTargetSource(target));
}

public void setTargetSource(TargetSource targetSource) {
    this.targetSource = (targetSource != null ? targetSource : EMPTY_TARGET_SOURCE);
}


public void setTargetClass(Class targetClass) {
    this.targetSource = EmptyTargetSource.forClass(targetClass);
}

Как видите, и setTarget(), и setTargetClass() записывают вто же поле, поэтому выигрывает последнее назначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...