0

我有一个看起来像下面的课程。

Class Parser{
  private String fileName;
  Parser(String fileName){
    this.fileName = fileName;
  }
}

现在我想使用 Spring 实例化这个类,但问题是fileName这里不是恒定的。它具有以下格式FileToBeParsed_<ddMMyyyy>,其中 ddMMyyyy 是当前日期时间(无论何时发生实例化)。

所以我正在考虑编写一个实用程序方法来生成正确的文件名,但是如何将它注入构造函数中?

在您的 spring 配置中创建第三方/库/JDK 类的 bean 也是一个好习惯。

谢谢

4

2 回答 2

3

您可以使用 SimpleDateFormatter 注入 filenamePrefix 并在构造函数中附加日期字符串,并对 new Date() 进行一些解析

Parser(String fileNamePrefix){
    String fileNameSuffix;
    //determine fileName suffix using new date and formatter
    ...

    this.fileName = fileNamePrefix + fileNameSuffix;
}

或者,如果您不喜欢在构造函数中编码的想法,您可以创建一个 FileNameGenerator 类,并使用 xml 构造函数参数或 Autowired 注释使用构造函数注入来注入它

@Autowired
Parser(FileNameGenerator fileNameGenerator){
    this.fileName = fileNameGenerator.getFileName();
}
于 2012-04-21T15:55:59.730 回答
3

假设您使用的是支持 spring EL 的 spring 版本,那么这应该适合您:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean name="sdf" class="java.text.SimpleDateFormat">
        <constructor-arg value="yyyy/MM/dd" />
    </bean>

    <bean name="parser" class="sandbox.Parser">
        <constructor-arg value="#{sdf.format(new java.util.Date())}" />
    </bean>
</beans>
于 2012-04-21T15:58:27.170 回答