gpt4 book ai didi

java - 将当前日期字符串注入(inject) Spring bean 配置中

转载 作者:行者123 更新时间:2023-12-02 05:46:35 25 4
gpt4 key购买 nike

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

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

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

在实际代码中很简单:

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

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

是否有可能做到这一点,如果可以的话我该怎么做?

最佳答案

嗯...从技术上讲你几乎可以做所有事情。我正在使用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>

然后简单地注入(inject):

@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?并非所有内容都必须注入(inject)...唯一的优点是它使测试更容易,因为您可以注入(inject)假字符串并且不依赖当前日期。但在这种情况下,考虑一些 DateProvider 接口(interface),让生活变得更简单。

此外,您真的希望在整个应用程序生命周期内拥有相同的日期(它将在启动时生成一次)吗?如果不是,currentDate bean 必须具有 prototype 范围,并且您必须在每次需要时从容器中延迟获取它...

关于java - 将当前日期字符串注入(inject) Spring bean 配置中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8492159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com