Ответ 1
Вы пробовали просто "TYPE1"? Я полагаю, что spring использует отражение для определения типа "type", так что полное имя кажется излишним. Должен признаться, я предполагаю, но spring вообще не подписывается на избыточность;)
У меня есть определенный тип перечисления, что-то вроде этого:
package my.pkg.types;
public enum MyEnumType {
TYPE1,
TYPE2
}
Теперь я хочу ввести значение этого типа в свойство bean:
<bean name="someName" class="my.pkg.classes">
<property name="type" value="my.pkg.types.MyEnumType.TYPE1" />
</bean>
... и это не сработало: (
Как мне вложить Enum в spring bean?
Вы пробовали просто "TYPE1"? Я полагаю, что spring использует отражение для определения типа "type", так что полное имя кажется излишним. Должен признаться, я предполагаю, но spring вообще не подписывается на избыточность;)
Используйте дочерний элемент значения вместо атрибута value и укажите имя класса Enum:
<property name="residence">
<value type="SocialSecurity$Residence">ALIEN</value>
</property>
Преимущество этого подхода в отношении простого написания value="ALIEN"
заключается в том, что он также работает, если Spring не может вывести фактический тип перечисления из свойства (например, объявленный тип свойства является интерфейсом). Адаптировано из комментария araqnid.
Я знаю, что это действительно старый вопрос, но если кто-то ищет новый способ сделать это, используйте пространство имен spring util:
<util:constant static-field="my.pkg.types.MyEnumType.TYPE1" />
Как описано в spring документации.
Вы можете просто сделать "TYPE1".
Вот что мне для меня MessageDeliveryMode является перечисление bean будет иметь значение PERSISTENT:
<bean class="org.springframework.amqp.core.MessageDeliveryMode" factory-method="valueOf">
<constructor-arg value="PERSISTENT" />
</bean>
Использование SPEL и P-NAMESPACE:
<beans...
xmlns:p="http://www.springframework.org/schema/p" ...>
..
<bean name="someName" class="my.pkg.classes"
p:type="#{T(my.pkg.types.MyEnumType).TYPE1}"/>
Вы можете написать редакторы Bean (подробности приведены в Spring Docs), если вы хотите добавить дополнительное значение и записать в пользовательские типы.
Spring -интеграция, маршрутизация на основе поля Enum:
public class BookOrder {
public enum OrderType { DELIVERY, PICKUP } //enum
public BookOrder(..., OrderType orderType) //orderType
...
конфигурации:
<router expression="payload.orderType" input-channel="processOrder">
<mapping value="DELIVERY" channel="delivery"/>
<mapping value="PICKUP" channel="pickup"/>
</router>
Чтобы быть конкретным, задайте значение как имя константы типа перечисления, например, "ТИП 1" или "ТИП 2" в вашем случае, как показано ниже. И он будет работать:
<bean name="someName" class="my.pkg.classes">
<property name="type" value="TYPE1" />
</bean>