spring中的implbean能比Interface拥有更多的公共方法吗?

spring中的implbean能比Interface拥有更多的公共方法吗?,spring,spring-boot,Spring,Spring Boot,如果spring中有一个带有1个抽象公共方法的接口,并且该接口的一个实现带有2个公共方法(1个是overide,第二个公共方法是extra)。如果我们自动连接接口,我们就不能在impl中使用第二个公共方法。这是正确的行为吗?在maven build中,它确实说它正在使用和自动连接IMPL bean,但无法找到第二个额外的公共方法。这更像是一个Java问题,而不是Spring问题。这里发生了一些事情: 是的,一个实现可以有比它所实现的接口更多的方法 由于您无法初始化接口(如Spring中的情况),

如果spring中有一个带有1个抽象公共方法的接口,并且该接口的一个实现带有2个公共方法(1个是overide,第二个公共方法是extra)。如果我们自动连接接口,我们就不能在impl中使用第二个公共方法。这是正确的行为吗?在maven build中,它确实说它正在使用和自动连接IMPL bean,但无法找到第二个额外的公共方法。

这更像是一个Java问题,而不是Spring问题。这里发生了一些事情:

  • 是的,一个实现可以有比它所实现的接口更多的方法
  • 由于您无法初始化接口(如Spring中的情况),它只能将接口的实现自动连接到bean
  • 让我们看一下以下示例:

    你有一个接口
    SomeInterface
    和方法
    methodA
    ,它的实现
    SomeInterfaceImpl
    methodB

    如果通过bean的接口自动连接bean:

    @Autowired private SomeInterface someInterface;
    
    然后,您只能访问
    methodA
    (显然没有显式地将其强制转换为
    SomeInterfaceImpl
    ),尽管您已经自动连接的是
    SomeInterfaceImpl
    ,并且已经实现了
    methodB

    如果自动关联其实现:

    @Autowired private SomeInterfaceImpl someInterface;
    

    然后您将能够访问
    methodA
    methodB
    。HTH.

    非常感谢您的详细解释:),但是您认为自动将SomeInterfaceImpl连接到访问方法b是一种很好的做法吗?有经验的spring开发人员是否经常使用这种技术来访问methodB?这取决于具体情况,但90%的情况下,这不是一种好的做法。如果您正在注入实现,那么拥有接口有什么意义?我过去曾这样做过,但正如我所说,在这种情况下是需要这样做的。