2015-07-01 72 views
0

我花了幾天時間研究Spring中使用XML配置注入方法的教程,並着手嘗試應用它。這些教程適用於簡單的示例。我的項目涉及更多一點。 這是場景:我將包含要讀取的文件的文件路徑的對象ReadTLEFileRequest傳遞給ReadTLEFile類(通過接口類實現)。 ReadTLEFile是文件得到處理等等Spring中對象屬性的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 bean配置,以及如何爲這種特殊情況實例化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

您可以將filepath bean類屬性添加爲class =「java.lang.String」。 TLE文件/ geostationary.txt Innocuous

+0

反饋幫助。謝謝。仍然收到我無法解決的錯誤消息。代碼居住在這裏:https://github.com/Carla-de-Beer/Java/tree/master/DI%20problem/ReadTLEFile – user2781042