首页 > 解决方案 > Spring @Autowired:自动装配接口如何工作

问题描述

当实现类扩展另一个类时,请帮助我了解自动装配如何与 Spring 中的接口一起使用。由于我们无法在Java中为接口创建对象,我的理解是Spring在使用@Autowired注解时会注入实现类的实例。在以下情况下,为什么在 TestServiceImpl 中自动装配 TestDAO 时无法调用继承方法( TestDAOImpl->save() )?

Interface CommonDAO
{
    
    save();
}

Class CommonDAOImpl implements CommonDAO
{
    
    // define save();
}



Interface TestDAO

{
    
    User createUser ()
}

class TestDAOImpl extends CommonDaoImpl{
    
    //define createUser()
}


class TestServiceImpl implements TestService{
    
    @Autowired
    TestDAO testDao

    public User createUser(){
    //Able to call testDao.createUser();
    //Why I am not able to call call testDao.save()?
    //what is actually happening when autowiring interface? Spring not injecting instance for TestDAOImpl in this case?
    }

}

标签: javaspringinterfaceautowired

解决方案


你说的是DAO层的两个维度,但是你只使用了其中一个,并且它们没有任何关联(继承、扩展、内部调用),以确保你理解范围内的范围和类之间的接口概念稍后再试,比如可以让一个子类继承CommonDAO,同时继承TestDAO,虽然这不符合单一职责原则,但是为了让你更好理解,可以试试


推荐阅读