如何在spring框架中注入java的枚举对象?

584 阅读2分钟

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代码的配置文件。

Inject Enum object in spring java

这三种方法在spring 2.5.6版本的java中适用于枚举。

请分享您对该主题的评论