2015-07-01 4 views
0

Я потратил несколько дней на изучение учебников по использованию метода инъекции 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 для данного конкретного случая.

ответ

-1

Ваша конфигурация может некоторые, что будет как этот

<br> 
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; 
    } 
} 


package useCases; 
class ReadTLEFile implements IReadTLEFile{ 
    private ReadTLEFileRequest request; 

    public void setRequest(ReadTLEFileRequest request){ 
    this.request = request; 
    } 
} 


<bean id="requestFile" class="useCases.ReadTLEFile"> 
    <property name="request"><ref bean = "requestObject"/></property> 
    </bean> 
    <bean id="requestObject" class="useCases.ReadTLEFileRequest"> 
     <property name = "filepath"><value>TLE files/geostationary.txt</value></property> 
    </property> 


ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); 
    IReadTLEFile object = context.getBean("requestObject",ReadTLEFile.class); 
    object.readFile(); 
+0

Ваше решение не является правильным. filepath - это объект String, а не bean-компонент, поэтому вы не должны объявлять bean-компонент с этим именем и указывать его как ссылку. Кроме того, если у вас есть зависимость от объекта ReadTLEFile к объекту запроса, а для зависимостей введена надлежащая конфигурация, зачем вам нужно вызвать object.readFile с параметром, который уже введен в атрибут объекта? – iullianr

+0

Вы можете добавить атрибут класса компонента pathpath как class = "java.lang.String". Файлы TLE/geostationary.txt Innocuous

+0

Обратная связь помогла. Спасибо. По-прежнему возникают сообщения об ошибках, которые я не могу решить. Код живет здесь: https: //github.com/Carla-de-Beer/Java/tree/master/DI%20problem/ReadTLEFile – user2781042

Смежные вопросы