我正在关注spring tutorial。
在“3.2。为业务逻辑添加一些类”一节中,创建了一个接口ProductManager
:
package springapp.service;
import java.io.Serializable;
import java.util.List;
import springapp.domain.Product;
public interface ProductManager extends Serializable{
public void increasePrice(int percentage);
public List<Product> getProducts();
}
然后创建一个SimpleProductManager
实现类:
package springapp.service;
import java.util.List;
import springapp.domain.Product;
public class SimpleProductManager implements ProductManager {
public List<Product> getProducts() {
throw new UnsupportedOperationException();
}
public void increasePrice(int percentage) {
throw new UnsupportedOperationException();
}
public void setProducts(List<Product> products) {
throw new UnsupportedOperationException();
}
}
实现类添加了一个额外的方法setProducts()
。接口ProductManager
是否也不具有setProducts
方法,以允许使用setProducts
的类以多态方式实例化SimpleProductManager
。目前这是不可能的 -
ProductManager p = new SimpleProductManager();
p.setProducts();
答案 0 :(得分:7)
接口不包含setProducts
,因为该接口的客户端(可能是MVC控制器)不应该调用它。该接口仅定义客户端应该使用的那些操作,而不是定义实现可能具有的所有方法。
bean配置可以访问setProducts
方法(例如使用<property name="products">
),这允许在启动时静态配置产品。之后,客户端代码通过其受限制的接口引用bean。
在此示例中永远不应调用您的p.setProducts()
示例,因为产品仅在Bean配置中配置,而不是由业务逻辑配置。