我正在开发一个程序,我希望将该文件输出到文件中,该文件的文件名后面附有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配置文件中执行此操作?
甚至可以这样做,如果是这样,我怎么能去做呢?
答案 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
范围,并且每次需要时都必须懒惰地从容器中取出它...