spring 注入一個以枚舉類型對象


1、枚舉

  在實際編程中,往往存在着這樣的“數據集”,它們的數值在程序中是穩定的,而且“數據集”中的元素是有限的。  

  例如星期一到星期日七個數據元素組成了一周的“數據集”,春夏秋冬四個數據元素組成了四季的“數據集”。

  在java中如何更好的使用這些“數據集”呢?因此枚舉便派上了用場,是枚舉的一個例子:

public enum ColorEnum {
RED, GREEN, YELLOW, BLUE;
}

 

2、在spring中配置注入一個枚舉類型對象

1)、定義枚舉類型對象

package com.zcr.util;
public enum ColorEnum {
RED, GREEN, YELLOW, BLUE;
}

2)、使用擁有枚舉類型的類

package com.zcr.util

//使用枚舉類型  
public class Car {  
    private ColorEnum colorEnum;  
}  

3)、spring 配置文件中加入下面的代碼

//spring配置文件注入  
<bean id="red" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">    
        <property name="staticField" value="com.zcr.util.ColorEnum.RED" />    
    </bean>  
<bean id="car" class="com.zcr.util.Car">  
        <property name="colorEnum" ref="red" />  
    </bean>  

注意

枚舉類型要想注入到類中,一定要先使用org.springframework.beans.factory.config.FieldRetrievingFactoryBean類將枚舉類型進行轉換,即

<bean id="red" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">    
        <property name="staticField" value="com.zcr.util.ColorEnum.RED" />    
</bean>  

將ColorEnum.RED轉換為RED這個bean,然后在要注入的bean中使用<property name="colorEnum" ref="red" />引用即可。

3)、調用

  在你要注入類的地方加入下面的代碼即可將類信息注入。

@Autowired
private Car car;

3、使用java自帶的一個Enum(枚舉)類型進行注入測試

  java中也存在着很多的枚舉類,如java.util.concurrent.TimeUnit,它的類定義如下:

public enum TimeUnitextends Enum<TimeUnit>

  由上面的定義我們可以看到,它是一個枚舉類。現在我要通過spring文件配置它生成的實例。

在spring配置文件中假如下面的配置:

   <bean id="timeUnit" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
       <property name="staticField" value="java.util.concurrent.TimeUnit.SECONDS" />
   </bean>

類中調用:

@Autowired
private TimeUnit timeUnit;

  這樣子該對象就拿到了。

4、為什么要使用文件配置的方式?

  想java的TimeUnit類,它有多種時間單位,毫秒、秒、分、時、天……,而我們在項目中使用的時候,肯定是統一時間單位的,所以我們可以通過配置文件配置,這樣子有利於解耦和,當我們要修改時間單位的時候,我們只需簡單的修改我們的配置文件就可以了,(最好還是少改代碼)。同時,我們肯定在多個地方用到了TimeUnit這個對象,假如我們配置在配置文件中,就只需要修改一個位置即可完成所有調用的修改,易於項目的修改。

  致謝:感謝您的閱讀!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM