Spring框架是一个流行的开源框架,用java开发应用程序。
Enum 是java 5功能中引入的java枚举关键字。
通常,在Spring配置文件中,我们将注入不同的自定义类以及预定义的类,如Integer、String。
如何在Spring IOC容器中注入枚举?
但在Spring容器中注入枚举类是不同的,因为如果我们不正确地注入,我们将以 "org.springframework.beans.TypeMismatchException. "这样的异常结束。
,那么在spring中避免TypeMismatchException的 解决办法是什么呢?
解决方案是使用spring自定义配置文件中的自定义属性编辑器
,我们必须将枚举转换为字符串,以便将枚举注入spring中的类。
本教程旨在找出在spring中注入枚举对象的方法。
这里是枚举定义的java类。
package com.cloudhadoop.constants;
enum Day {
MONDAY(0), TUESDAY(1), WEDNESDAY(2), THURSDAY(3), FRIDAY(4), SATURDAY(5), SUNDAY(
6);
private final int dayNumber;
private Day(int dayNumber) {
this.dayNumber = dayNumber;
}
public int getDayNumber() {
return dayNumber;
}
}
在spring框架中注入枚举对象有很多方法
一种方法是使用枚举属性来注入枚举的单个值,如下所示
<bean id="first" class="First">
<property name="weekday" value="1" />
</bean>
以及用于注入的Java类
class First{
private String weekday;
public void setWeekday(Integer weekday) {
this.weekday = Day.valueOf(weekday);
}
}
spring属性编辑器会在内部为枚举属性分配正确的值
第二种方法是使用工厂方法注入,如下所示。
上述方法是轻量级的,并且spring容器在陈述时验证了配置。
或者另一种方法是使用util: constant标签来分配所有枚举值。
<util:list id="days" value-type="com.cloudhadoop.constants">
<value>MONDAY</value>
<value>TUESDAY</value>
<value>WEDNESDAY</value>
<value>THURSDAY</value>
<value>FRIDAY</value>
</util:list>
下面是一个spring组件的代码示例
import com.cloudhadoop.constants.Day;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class DayTest {
@Autowired
public Day day;
}
这种方法在开发时为IDE提供了bean验证。请点击下面的截图查看spring代码的配置文件。

这三种方法在spring 2.5.6版本的java中适用于枚举。
请分享您对该主题的评论