كيف يمكنك الوصول إلى خاصية الفول للقراءة في ملف تكوين xml الربيعي؟

StackOverflow https://stackoverflow.com/questions/142740

  •  02-07-2019
  •  | 
  •  

سؤال

أريد أن أفعل شيئًا مثل ما يلي في الربيع:

<beans>
    ...
    <bean id="bean1" ... />
    <bean id="bean2">
        <property name="propName" value="bean1.foo" />
...

أعتقد أن هذا سيؤدي إلى الوصول إلى طريقة getFoo () لـ bean1 واستدعاء طريقة setPropName () لـ bean2، ولكن يبدو أن هذا لا يعمل.

هل كانت مفيدة؟

المحلول

الذي فهمته:

  1. لديك فول (بين 1) مع خاصية تسمى "فو"
  2. لديك فول آخر (Bean2) مع خاصية تسمى "Propname" ، ويجب أن يكون لديك أيضًا نفس "Foo" في Bean1.

لماذا لا تفعل هذا:

<beans>
...
<bean id="foo" class="foopackage.foo"/>
<bean id="bean1" class="foopackage.bean1">
  <property name="foo" ref="foo"/>
</bean> 
<bean id="bean2" class="foopackage.bean2">
  <property name="propName" ref="foo"/>
</bean>
....
</beans>

عند القيام بذلك، فإن Bean2 الخاص بك لا يقترن Bean1 كما في المثال الخاص بك.يمكنك تغيير Bean1 وbean2 دون التأثير على بعضهما البعض.

اذا أنت حقًا إذا كنت بحاجة إلى إجراء الحقنة التي اقترحتها، يمكنك استخدام:

<util:property-path id="propName" path="bean1.foo"/>

نصائح أخرى

تحتاج إلى استخدام PropertyPathFactoryBean:

    <bean id="bean2" depends-on="bean1">
        <property name="propName">
            <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
                <property name="targetBeanName" value="bean1"/>
                <property name="propertyPath" value="foo"/>
            </bean>
        </property>
    </bean>

أعتقد أن عليك حقن Bean1، ثم الحصول عليه foo يدويًا بسبب مشكلة التوقيت.متى يحل الإطار قيمة الحبة المستهدفة؟

يمكنك إنشاء حبة مؤشر وتكوينها.

class SpringRef {
  private String targetProperty;
  private Object targetBean;

  //getters/setters

  public Object getValue() {
    //resolve the value of the targetProperty on targetBean. 
  }
}

Common-BeanUtils يجب أن تكون مفيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top