Spring:自动装入java.util.Locale类型的bean似乎不起作用

时间:2011-09-20 11:43:04

标签: xml spring javabeans autowired

我正在为我的开发人员编写一个关于Spring(3.0.x)的非常简单的教程,并且遇到了一个奇怪的行为:java.util.Locale类型的bean没有自动连接到其他bean,并且没有错误消息。但是,另一个bean被创建好了,只是字段为空。

详细信息:

  • 配置完全基于XML。
  • Bean定义如下:

    <bean id="spanishLocale" class="java.util.Locale">
        <constructor-arg value="es"/>
        <constructor-arg value="ES"/>
    </bean>
    
    <bean id="dateTimeBeanSetter" class="com.bsl.training.theclock.SimpleDateTimeBean3" autowire="byType"/>
    
  • 未使用自动装配定制。

  • 类别:

包com.bsl.training.theclock;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;


public class SimpleDateTimeBean3 {
    private Locale locale;

    public SimpleDateTimeBean3() {

    }

    public void setLocale(final Locale loc) {
        locale = loc;
    }

    public Locale getLocale() {
        return locale;
    }

    public String getDateTime() {
        DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, locale);
        return df.format(new Date());
    }   
}
  • 如果我在SimpleDateTimeBean3类中添加一个字段,哪个类型是我自己的类之一并且存在这样的bean,那么一切都很完美。
  • 没有打印错误,两个bean(spanishLocale,dateTimeBeanSetter)都是从ApplicationContext创建和访问的,但是在'dateTimeBeanSetter'bean上调用getDateTime()会给出一个NPE。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

两个关键文档片段:

参考手册第3.4.5.1节:

  

您无法自动装配所谓的简单属性,例如基元,字符串和类(以及此类简单属性的数组)。这种限制是按设计的

来自org.springframework.beans.BeanUtils#isSimpleProperty()javadoc:

  

检查给定类型是否表示“简单”属性:基元,字符串或其他CharSequence,数字,日期,URI,URL,区域设置,类或相应的数组。检查是否给定类型表示“简单”属性:基元,字符串或其他CharSequence,数字,日期,URI,URL, 区域设置 ,类,或相应的数组。

所以,按设计工作。