Я потратил несколько дней на изучение учебников по использованию метода инъекции XML-конфигурации весной и приступил к моей первой попытке применить его. Учебники применяются к простым примерам. Мой проект немного связан. Это сценарий: я передаю объект ReadTLEFileRequest, содержащий путь к файлу, который должен быть прочитан, в класс ReadTLEFile (реализованный через класс интерфейса). ReadTLEFile где файл, обрабатывается и т.д.XML-конфигурация атрибутов объекта весной
package useCases;
import java.io.IOException;
public interface IReadTLEFile {
public ReadTLEFileResult readFile(ReadTLEFileRequest object)
throws IOException, FileEmptyException,
FileIncorrectFormatException, FileIncorrectDataException;
}
package useCases;
public class ReadTLEFileRequest {
String filepath;
public ReadTLEFileRequest(String filepath) {
this.filepath = filepath;
}
public String getFilePath() {
return filepath;
}
}
Основной метод в настоящее время выглядит следующим образом (и выполняется без проблем):
public static void main(String[] args) {
String filepath = "TLE files/geostationary.txt";
ReadTLEFileRequest request = new ReadTLEFileRequest(filepath);
IReadTLEFile reader = new ReadTLEFile(request);
try {
reader.readFile(request);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
Я хотел бы использовать инъекции зависимостей, так что я имею в виду, главным метод должен быть изменен, чтобы стать чем-то вроде этого:
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
try{
ReadTLEFileRequest object = (ReadTLEFileRequest) context.getBean("requestObject");
object.readFile(request);
}
finally{
context.close();
}
файл beans.xml содержит
<bean id="requestFile" class="useCases/ReadTLEFileRequest">
<property name="requestObject">
<bean id="requestObject" class="useCases/ReadTLEFileRequest"></property>
</bean>
По существу, возникает вопрос: как правильно построить конфигурацию XML-компонента для объекта со свойствами и как создать экземпляр IoC для данного конкретного случая.
Ваше решение не является правильным. filepath - это объект String, а не bean-компонент, поэтому вы не должны объявлять bean-компонент с этим именем и указывать его как ссылку. Кроме того, если у вас есть зависимость от объекта ReadTLEFile к объекту запроса, а для зависимостей введена надлежащая конфигурация, зачем вам нужно вызвать object.readFile с параметром, который уже введен в атрибут объекта? – iullianr
Вы можете добавить атрибут класса компонента pathpath как class = "java.lang.String". Файлы TLE/geostationary.txt –
Innocuous
Обратная связь помогла. Спасибо. По-прежнему возникают сообщения об ошибках, которые я не могу решить. Код живет здесь: https: //github.com/Carla-de-Beer/Java/tree/master/DI%20problem/ReadTLEFile – user2781042