我的解决方案如下:
VehicleDao接口中的isResponsibleFor方法:
interface VehicleDao { public boolean isResponsibleFor(Vehicle vehicle);}示例实现:
@Repositoryclass CarDAO implements VehicleDAO { public boolean isResponsibleFor(Vehicle vehicle) { return "CAR".equals(vehicle.getType()); }}然后自动连接VehicleService中所有VehicleDao实现的列表:
public class VehicleServiceImpl implements VehicleService { @Autowired private List<VehicleDao> vehicleDaos; private VehicleDao daoForVehicle(Vehicle vehicle) { foreach(VehicleDao vehicleDao : vehicleDaos) { if(vehicleDao.isResponsibleFor(vehicle) { return vehicleDao; } } throw new UnsupportedOperationException("unsupported vehicleType"); } @Transactional public void save(Vehicle vehicle) { daoForVehicle(vehicle).save(vehicle); }}这样做的好处是,以后再添加新的vehicleType时,您无需修改服务-您只需要添加新的VehicleDao实现。



