将当前日期字符串注入Spring bean配置

时间:2011-12-13 15:57:29

标签: java spring configuration

我正在开发一个程序,我希望将该文件输出到文件中,该文件的文件名后面附有yyy/MM/dd格式的当前数据。

我想使用Spring将表示输出文件位置的File对象注入需要它的类中。

但是,我不知道在创建File对象时如何将当前日期附加到filename参数。

在实际代码中很简单:

String outputFileName = "someFile";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
outputFileName += " " + sdf.format(new Date());
File outputFile = new File(outputFileName);

我如何在Spring bean配置文件中执行此操作?

甚至可以这样做,如果是这样,我怎么能去做呢?

1 个答案:

答案 0 :(得分:8)

嗯......从技术上讲,你几乎可以做任何事情。我正在使用FastDateFormat,因为它既快又快( duh!)和线程安全。 java.text.SimpleDateFormat也可以使用:

<bean id="fastDateFormat" class="org.apache.commons.lang.time.FastDateFormat" factory-method="getInstance">
    <constructor-arg value="yyyy/MM/dd"/>
</bean>

<bean id="currentDate" class="java.util.Date" factory-bean="fastDateFormat" factory-method="format">
    <constructor-arg>
        <bean class="java.util.Date"/>
    </constructor-arg>
</bean>

然后简单地注入:

@Resource
private String currentDate;  //2011/12/13

请注意,在普通Java中或使用@Configuration方法运行它会简单得多:

@Bean FastDateFormat fastDateFormat() {
  return new FastDateFormat("yyyy/MM/dd");
}

@Bean String currentDate() = {
  return fastDateFormat().format(new Date());
}

话虽这么说,你为什么不在@PostConstruct写普通Java而不是过度依赖DI?并非一切都必须注入...唯一的优点是它使测试更容易,因为你可以注入假字符串而不依赖于当前日期。但在这种情况下,想一些DateProvider接口,可以简化生活。

您是否真的希望整个应用程序生命周期具有相同的日期(它将在启动时生成一次)?如果没有,currentDate bean必须具有prototype范围,并且每次需要时都必须懒惰地从容器中取出它...