使用Spring autowire将条件替换为多态

时间:2018-03-15 01:57:44

标签: spring

我有此服务代码

pairwise

在这样的控制器中调用它:

@Service
public class StoreCartService {
public boolean addItem(Cart cart, Long productId, Integer quantity) {
    cart.handleRequest(productId,"+"+quantity);
    return true;
}

public boolean deleteItem(Cart cart, Long productId, Integer quantity) {
    cart.handleRequest(productId,"-"+quantity);
    return true;
}
}

return storeCartService.addItem(cart,cartItem.getProductId(),cartItem.getQuantity() );

我想过像这样重构:

return storeCartService.deleteItem(cart,cartItem.getProductId(),cartItem.getQuantity() );

}

abstract class Item{
abstract boolean processItem(Cart cart, Long productId, Integer quantity);
客户端代码中的

取决于您调用它的位置......

class CartItemAddition extends Item{
boolean processItem(Cart cart, Long productId, Integer quantity){
    cart.handleRequest(productId,"+"+quantity);
}
}   

class CartItemDeletion extends Item{
boolean processItem(Cart cart, Long productId, Integer quantity){
    cart.handleRequest(productId,"-"+quantity);
}
}

Item item = new CartItemAddition();

但是我不能这样做,因为Service对象正在自动装配。我不能像我想要的那样实例化它。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你可以通过名字自动装配。

@Resource(name = "cartItemAddition")