2015-07-01 37 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