Использование SpEL => через другой компонент
<bean id="bank" class="UsBank">
<property name="moneyLeft" value="100"/> <!-- initial value -->
</bean>
<bean id="bet" class="UsDollars" scope="prototype">
<constructor-arg value="#{ bank.moneyLeft }"/>
</bean>
Допустим, бин bank
куда-то внедрен, поэтому у вас есть к нему доступ:
bank.setMoneyLeft( 100 )
Bet currentBet = appContext.getBean( "bet" )
Использование SpEL => через выражение
Если этот аргумент можно вычислить с помощью произвольного выражения:
<bean id="bet" class="UsDollars" scope="prototype">
<constructor-arg value="#{ T(java.lang.Math).random() * 100.0 }"/>
</bean>
Использование SpEL => через Свойства системы
Если ваш вариант использования позволяет использовать системные свойства:
<bean id="bet" class="UsDollars" scope="prototype">
<constructor-arg value="#{ systemProperties['moneyLeft'] }"/>
</bean>
чтобы получить боб:
System.setProperty( "moneyLeft", "5000" )
Bet currentBet = appContext.getBean( "bet" )
Вы можете прочитать подробнее о SpEL .
Стоит отметить, что при создании bet
bean прототипа => если его внедрить в другой bean-компонент, он (другой bean-компонент) также должен быть прототипом, или существует некоторая магия AOP, которая можно использовать, но это может быть не так важно в вашем случае.
Если вышеуказанный компонент не обязательно должен быть prototype
(что означает, что вам потребуется только один экземпляр этого компонента, но не во время создания контекста приложения), вы можете удалить scope="prototype"
и добавьте lazy="true"
. Это заставит Spring пытаться создать этот bean-компонент только при первом обращении к нему.