У меня есть два компонента b1
и b2
и логическое свойство myFlag
. И b1
, и b2
должны быть сконструированы, поскольку они используются в разных частях приложения. Иерархии классов b1
и b2
выглядят следующим образом:
interface MyFirstInterface { ... }
class B1Class implements MyFirstInterface { ... }
interface MySecondInterface extends MyFirstInterface { ... }
class B2Class implements MySecondInterface { ... }
В моем первом файле проекта у меня есть:
<service id="b1" interface="com.company.MyFirstInterface">
<bean class="com.company.B1Class" />
</service>
<service id="b2" interface="com.company.MySecondInterface">
<bean class="com.company.B2Class" />
</service>
Во втором файле чертежа у меня есть:
<cm:property-placeholder persistent-id="com.company.settings" update-strategy="reload">
<cm:default-properties>
<cm:property name="myFlag"/>
</cm:default-properties>
</cm:property-placeholder>
<reference id="myBean" interface="com.company.MyFirstInterface">
Предположим, что я хочу:
myBean
для обозначения b1
, если и только если myFlag
равно false
и
myBean
для обозначения b2
, если и только если myFlag
равно true
.
Возможно ли это с учетом вышеуказанной конфигурации? Если да, что нужно сделать, чтобы это сработало?
Примечание: Я бы не хотел добавлять дополнительные свойства. Это не смертный приговор, если мне действительно нужно добавить один; Мне нужно решение этой проблемы независимо от удобства. myFlag
просто оказывается существующим свойством в производственной системе, поэтому, если мне удастся придерживаться этого единственного свойства (которое напрямую связано с тем, какой бин должен быть выбран), это предпочтительнее.