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;