我有一个抽象类AbstractService,它引用了AbstractDAO

class AbstractService{
   protected AbstractDAO abstractDAO;
}
AbstractService将通过ServiceClassAServiceClassB等实际服务类进行扩展,
AbstractDAO将通过DaoClassADaoClassB等扩展。

根据扩展AbstractService的类,abstractDAO应该是DaoClassADaoClassB等的实例。

我可以通过在扩展类中使用abstractDAO setter来实现此目的,例如
class ServiceClassA{
    @Autowired
    @Qualifier("daoClassA")
    public void setAbstractDAO(AbstractDAO abstractDAO) {
        super.abstractDAO = abstractDAO;
    }
}

有什么办法可以在setAbstractDAO类本身中使用二传手AbstractServiceabstractDAO根据子类而自动连接,可能是SPEL + Qualifier等

我们不想为此使用任何XML配置

最佳答案

我不会那样做。确实,ServiceClassA非常有可能依赖于DaoClassA的某些特定方法。在这种情况下,每次要调用这样的特定方法时,都必须将 protected AbstractDAO强制转换为DaoClassA。

我将其设为通用,并反转依赖项的注入(inject)方式:

public class AbstractService<T extends AbstractDAO> {
    protected T dao;

    protected AbstractService(T dao) {
        this.dao = dao;
    }

    // methods common to all the services
}

public class ServiceClassA extends AbstractService<DaoClassA> {
    @Autowired
    public ServiceClassA(DaoClassA dao) {
        super(dao);
    }

    // methods specific to ServiceClassA
}

09-29 23:48