Spring: как избежать copy-paste в конфигах
От: C0s Россия  
Дата: 14.03.08 15:54
Оценка:
приветствую,

есть пара вопросов, возникших по причине ненахождения ответов в документации:

1) есть набор бинов одного типа, каждый по ~15 свойств, из которых только два меняются, остальные — одинаковые для всего набора
можно ли как-нибудь сконфигурировать бин с id1 полностью, а остальные id2..idN конфигурировать по принципу "возьми значения и имя класса как у id1, а такие-то два свойства установи так-то"?

2) есть несколько разных бинов, каждый из которых содержит Hashtable jndi-свойств. в типичной конфигурации эти свойства для всех этих бинов одинаковы.
можно ли как-нибудь описать <props> отдельно, а в конфигурациях этих бинов только ссылаться на них?


ps. интересуют версии спринга 2.0.x (текущая в проекте) и последняя (в том смысле, что если выяснится, что удобные подходы к конфигурированию доступны только в последней версии, то это будет плюс к планированию в проекте upgrade)
Re: Spring: как избежать copy-paste в конфигах
От: LDimas Россия  
Дата: 14.03.08 16:24
Оценка:
Здравствуйте, C0s, Вы писали:

C0s>приветствую,


C0s>есть пара вопросов, возникших по причине ненахождения ответов в документации:


C0s>1) есть набор бинов одного типа, каждый по ~15 свойств, из которых только два меняются, остальные — одинаковые для всего набора

C0s>можно ли как-нибудь сконфигурировать бин с id1 полностью, а остальные id2..idN конфигурировать по принципу "возьми значения и имя класса как у id1, а такие-то два свойства установи так-то"?

C0s>2) есть несколько разных бинов, каждый из которых содержит Hashtable jndi-свойств. в типичной конфигурации эти свойства для всех этих бинов одинаковы.

C0s>можно ли как-нибудь описать <props> отдельно, а в конфигурациях этих бинов только ссылаться на них?


C0s>ps. интересуют версии спринга 2.0.x (текущая в проекте) и последняя (в том смысле, что если выяснится, что удобные подходы к конфигурированию доступны только в последней версии, то это будет плюс к планированию в проекте upgrade)

Я в свое время просто инкуапсулировал неизменные свойства в отедельный класс и инжектил его в свои бины. Но действительно интересно, есть ли другое решенение
Re: Spring: как избежать copy-paste в конфигах
От: Sergey Astakhov Россия  
Дата: 14.03.08 17:35
Оценка: 12 (3)
Здравствуйте, C0s, Вы писали:

C0s>приветствую,


C0s>есть пара вопросов, возникших по причине ненахождения ответов в документации:


Плохо искал.

C0s>1) есть набор бинов одного типа, каждый по ~15 свойств, из которых только два меняются, остальные — одинаковые для всего набора

C0s>можно ли как-нибудь сконфигурировать бин с id1 полностью, а остальные id2..idN конфигурировать по принципу "возьми значения и имя класса как у id1, а такие-то два свойства установи так-то"?

http://static.springframework.org/spring/docs/2.0.x/reference/beans.html#beans-child-bean-definitions

C0s>2) есть несколько разных бинов, каждый из которых содержит Hashtable jndi-свойств. в типичной конфигурации эти свойства для всех этих бинов одинаковы.

C0s>можно ли как-нибудь описать <props> отдельно, а в конфигурациях этих бинов только ссылаться на них?

org.springframework.beans.factory.config.PropertiesFactoryBean ?

C0s>ps. интересуют версии спринга 2.0.x (текущая в проекте) и последняя (в том смысле, что если выяснится, что удобные подходы к конфигурированию доступны только в последней версии, то это будет плюс к планированию в проекте upgrade)


Это всё было ещё в Spring 1.2.x
Re[2]: Spring: как избежать copy-paste в конфигах
От: C0s Россия  
Дата: 14.03.08 17:36
Оценка:
Здравствуйте, LDimas, Вы писали:

LD>Я в свое время просто инкуапсулировал неизменные свойства в отедельный класс и инжектил его в свои бины. Но действительно интересно, есть ли другое решенение


это в моём случае неприемлемо, т.к. набор свойств — цельный, причём в одном случае в наборе бинов они отличаются друг от друга значениями только двух свойств, в другом — трёх и т.п.
Re[2]: Spring: как избежать copy-paste в конфигах
От: C0s Россия  
Дата: 14.03.08 17:49
Оценка:
Здравствуйте, Sergey Astakhov, Вы писали:

SA>http://static.springframework.org/spring/docs/2.0.x/reference/beans.html#beans-child-bean-definitions


то, что надо!

C0s>>2) есть несколько разных бинов, каждый из которых содержит Hashtable jndi-свойств. в типичной конфигурации эти свойства для всех этих бинов одинаковы.

C0s>>можно ли как-нибудь описать <props> отдельно, а в конфигурациях этих бинов только ссылаться на них?

SA>org.springframework.beans.factory.config.PropertiesFactoryBean ?


нет, я не хочу свойства брать из файла, попытаюсь пояснить подробнее:

есть в моём проекте, предположим, jms-spring.xml
  <bean id="jmsJNDITemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
      <props>
        <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
        <prop key="java.naming.provider.url">localhost:1099</prop>
        <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
      </props>
    </property>
  </bean>

  <.. куча всего ..>

  <bean id="jmsResourceAdapter" class="com.sun.genericra.GenericJMSRA">
    <...>
    <property name="jndiProperties">
      <props>
        <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
        <prop key="java.naming.provider.url">localhost:1099</prop>
        <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
      </props>
    </property>
  </bean>

  <.. ещё куча всего ..>


я хочу объект типа Hashtable со значениями описать отдельным бином jndiProps, чтобы его можно было инжектить через
  <property name="environment" ref="jndiProps"/>
и
  <property name="jndiProperties" ref="jndiProps"/>


т.к. Hashtable — не класс с setterами в привычном смысле этого слова, то как сделать бин этого типа я из доки не понял
Re[3]: Spring: как избежать copy-paste в конфигах
От: Sergey Astakhov Россия  
Дата: 14.03.08 18:02
Оценка: 8 (1)
Здравствуйте, C0s, Вы писали:

SA>>org.springframework.beans.factory.config.PropertiesFactoryBean ?


C0s>нет, я не хочу свойства брать из файла


А он не только из файла умеет свойства брать.

<bean id="jndiProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
 <property name="properties">
  <props>
   <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
   <prop key="java.naming.provider.url">localhost:1099</prop>
   <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
  </props>
 </property>
</bean>
Re[4]: Spring: как избежать copy-paste в конфигах
От: Sergey Astakhov Россия  
Дата: 14.03.08 19:06
Оценка: 1 (1)
Здравствуйте, Sergey Astakhov, Вы писали:

SA>А он не только из файла умеет свойства брать.


Кроме того, в 2.0 есть ещё такая штука, как util:properties, соотвественно, если не ошибаюсь (c 2.0 пока ещё не работал ), можно ещё и вот так:

<util:properties id="jndiProperties">
 <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
 <prop key="java.naming.provider.url">localhost:1099</prop>
 <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
</util:properties>
Re[5]: Spring: как избежать copy-paste в конфигах
От: C0s Россия  
Дата: 16.03.08 04:25
Оценка:
Здравствуйте, Sergey Astakhov, Вы писали:

SA>Кроме того, в 2.0 есть ещё такая штука, как util:properties, соотвественно, если не ошибаюсь (c 2.0 пока ещё не работал ), можно ещё и вот так:


SA><util:properties id="jndiProperties">
SA> <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
SA> <prop key="java.naming.provider.url">localhost:1099</prop>
SA> <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
SA></util:properties>


работает!

для этого в начале xml-файла с конфигурацией надо вместо dtd-валидации указать xsd-валидацию, прописав также util-namespace:
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">
<!-- ................ -->
</beans>
Re: Spring: как избежать copy-paste в конфигах
От: leith  
Дата: 17.03.08 08:47
Оценка:
Здравствуйте, C0s, Вы писали:

<bean id="baseBean" abstract="true" class="your.pakage.BaseBeanClass">
<property name="settings">
<set>... your settings ...</set>
</property>
</bean>

<bean id="concreteBean1" parent="baseBean"/>
<bean id="concreteBean2" parent="baseBean"/>

Может что-то а этом роде?
Re[2]: Spring: как избежать copy-paste в конфигах
От: C0s Россия  
Дата: 17.03.08 09:55
Оценка:
Здравствуйте, leith, Вы писали:

L>Может что-то а этом роде?


да уже дали более, чем исчерпывающий ответ выше
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.