Другим решением было бы поставить вызов: SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this)
в конструктор MileageFeeCalculator следующим образом:
@Service
public class MileageFeeCalculator {
@Autowired
private MileageRateService rateService; // <--- will be autowired when constructor is called
public MileageFeeCalculator() {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this)
}
public float mileageCharge(final int miles) {
return (miles * rateService.ratePerMile());
}
}
Похоже на разделенные табуляцией данные. Используйте синтаксический анализатор CSV, чтобы прочитать их, такие как univocity
Существуют библиотеки, подобные упомянутым, но для этого простого случая можно легко сделать, используя только java.util
:
public class PersonsReader {
public static void main(String[] args) throws IOException {
String content = new String(Files.readAllBytes(Paths.get("inputFile.txt")));
List<Person> persons = Arrays.stream(content.split("\n\n"))
.map(PersonsReader::toPerson).collect(Collectors.toList());
// use persons list here
}
private static Person toPerson(String personData) {
Map<String, String> keyValue = Arrays.stream(personData.split("\n"))
.collect(Collectors.toMap(
line -> line.split("\\s+")[0],
line -> line.split("\\s+")[1]));
return new Person(keyValue.get("name"),
keyValue.get("birthday"),
keyValue.get("address"),
keyValue.get("Postcode"),
keyValue.get("phone"));
}
}
Обратите внимание, что некоторые ключи не существуют в keyValue
, поэтому Person
Конструктор получает null
для некоторых параметров. Кроме того, в конструкторе Person
вы можете при необходимости преобразовать параметр в Integer
(и сначала проверить, если null
).