2012-02-08 16 views
1

には、私は、次の豆を持って言う:春 - 複数のプロパティセットを含むビーン

<bean id="some-bean" class="com.icyrock.example.SomeBean"> 
    <property name="pa1" value="va1"/> 
    <property name="pa2" value="va2"/> 
    <property name="pa3" value="va3"/> 
    <property name="pa4" value="va4"/> 
    <property name="pa5" value="va5"/> 
    <property name="pa5"> 
    <bean class="com.icyrock.example.SomeOtherBean> 
     <property name="px1" value="vx1"/> 
     <property name="px2" value="vx2"/> 
     <property name="px3" value="vx3"/> 
     <property name="px4" value="vx4"/> 
     <property name="px5" value="vx5"/> 
    </bean> 
    </property> 
</bean> 

Iの線に沿ってブロックにこれを分離したい:

<block id="b1"> 
    <property name="pa1" value="va1"/> 
    <property name="pa2" value="va2"/> 
    <property name="pa3" value="va3"/> 
</block> 

<block id="b2"> 
    <property name="pa4" value="va4"/> 
    <property name="pa5" value="va5"/> 
</block> 

<block id="b3"> 
    <property name="px1" value="vx1"/> 
    <property name="px2" value="vx2"/> 
</block> 

<block id="b4"> 
    <property name="px3" value="vx3"/> 
    <property name="px4" value="vx4"/> 
    <property name="px5" value="vx5"/> 
</block> 

<bean id="some-bean" class="com.icyrock.example.SomeBean"> 
    <block-ref id="b1"/> 
    <block-ref id="b2"/> 
    <property name="pa5"> 
    <bean class="com.icyrock.example.SomeOtherBean> 
     <block-ref id="b3"/> 
     <block-ref id="b4"/> 
    </bean> 
    </property> 
</bean> 

blockblock-refアイデアを説明するためだけの想像上のスプリングタグです。

せずにこれを行う方法があります:

ないすでに春自体(すなわち沿って何に何かを使用して、Javaクラス(例えばプロパティのマップまたはサブクラスを受け入れる)
  • を変更
    • は、いくつかの工場/不動産設定者/ Springコンテキストファイルで使用するその他のものをビルドする行)

    目的は、関係(例:親子)を使わずに定義(つまりブロック)を再利用することです関係やそのようなもの)。

    <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> 
        <property name="driverClassName" value="${jdbc.driverClassName}"/> 
        <property name="url" value="${jdbc.url}"/> 
        <property name="username" value="${jdbc.username}"/> 
        <property name="password" value="${jdbc.password}"/> 
    </bean> 
    

    hereから例):例として、これは標準のJDBCデータ・ソースの定義です。異なるサーバーがアクセスしている場合、同じドライバを共有する場合があります(driverClassNameが共有されます)。同じ資格情報を使用する場合もあります(usernamepasswordが共有されます) 。私は次のようなことをしたい:

    <block id="driver-credentials"> 
        <property name="driverClassName" value="${jdbc.driverClassName}"/> 
        <property name="username" value="${jdbc.username}"/> 
        <property name="password" value="${jdbc.password}"/> 
    </block> 
    
    <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSource"> 
        <property name="url" value="${jdbc.url1}"/> 
        <block-ref id="driver-credentials"/> 
    </bean> 
    
    <bean id="ds2" class="org.apache.commons.dbcp.BasicDataSource"> 
        <property name="url" value="${jdbc.url2}"/> 
        <block-ref id="driver-credentials"/> 
    </bean> 
    
    <bean id="ds3" class="org.apache.commons.dbcp.BasicDataSource"> 
        <property name="url" value="${jdbc.url3}"/> 
        <block-ref id="driver-credentials"/> 
    </bean> 
    

    またはこれらの行に沿ったもの。明らかに、これはこの単純な例の親子になることができます。私はmixin型のソリューションについて疑問を抱いています。 Beanのレベルを除いてSpringが複数のファイルに対して提供しているのとほとんど同じです。

    上記を行うことが効果的ではないか、代替方法が歓迎される理由についての意見。

  • 答えて

    0

    子どもにmerge = trueの親子は、春にサポートされている子です。 mergeはmixinとして機能します(コレクションの方法で)、そうですか?

    +0

    はい、私は親子関係を持たないようにしようとしています。プロパティはコレクションではなく、それぞれが本当に何か(例:上記のようなString)であるプロパティのセットです。 –

    関連する問題