我有一个抽象类AbstractService
,它引用了AbstractDAO
class AbstractService{
protected AbstractDAO abstractDAO;
}
AbstractService
将通过ServiceClassA
,ServiceClassB
等实际服务类进行扩展,和
AbstractDAO
将通过DaoClassA
,DaoClassB
等扩展。根据扩展
AbstractService
的类,abstractDAO
应该是DaoClassA
,DaoClassB
等的实例。我可以通过在扩展类中使用abstractDAO setter来实现此目的,例如
class ServiceClassA{
@Autowired
@Qualifier("daoClassA")
public void setAbstractDAO(AbstractDAO abstractDAO) {
super.abstractDAO = abstractDAO;
}
}
有什么办法可以在
setAbstractDAO
类本身中使用二传手AbstractService
和abstractDAO
根据子类而自动连接,可能是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
}