Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java接口扩展和Spring';自动连线_Java_Spring - Fatal编程技术网

Java接口扩展和Spring';自动连线

Java接口扩展和Spring';自动连线,java,spring,Java,Spring,我有这个界面: public interface RestService { //other methods } 此接口扩展了RestService: public interface NewRestService extends RestService{ void downloadPOD(String baseUrl, String orderNo); } 我的实施: public class NewRestServiceImpl implements New

我有这个界面:

public interface RestService {
    //other methods
}
此接口扩展了RestService:

public interface NewRestService extends RestService{
        void downloadPOD(String baseUrl, String orderNo);   
}
我的实施:

public class NewRestServiceImpl implements NewRestService { 
   public void downloadPOD(...);

   //other method implementations
}
当我这样做的时候,它说

downloadPOD()未定义:


请开导我。谢谢,downloadPOD()是在NewRestService中定义的,而不是在REstService中定义的。在RestService或autowire NewRestService中声明downloadPOD()。这与spring无关,这是java的问题。

这是因为
downloadPOD
方法没有在
RestService
接口中定义。如果确定将注入正确的实现,则可以强制转换bean:

@Autowired
private RestService restService;

((NewRestService) restService).downloadPOD(...)
或者,如果您需要使用接口中没有的实现api,那么最好只注入
NewRestService
NewRestServiceImpl

@Autowired
private NewRestService newRestService;

谢谢我一直认为最好使用最高级别的界面。顺便说一句,使用cast是个好主意吗?强制转换是运行时异常的来源吗?@Shazam是的,这就是为什么我下面提到的自动连线
NewRestService
更好的原因。没问题,如果你喜欢答案,考虑一下投票;Shazam您应该尽可能使用最高级别的接口。如果你真的需要更具体的东西,那么你需要它。很多方法只需要一个
集合
,但只有对
列表
进行排序才有意义。注意:在字段上使用构造函数注入,而不是使用
@Autowired
。(如果您只有一个构造函数,您甚至不需要在其上安装
@Autowired
。)
@Autowired
private NewRestService newRestService;