Java 这个春季教程中的错误实践?

Java 这个春季教程中的错误实践?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我在跟踪调查 在“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

我在跟踪调查

在“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();

}
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();

该接口不包括
setProducts
,因为该接口的客户端(可能是MVC控制器)不应该调用它。接口只定义客户端应该使用的那些操作,而不是定义实现可能具有的所有方法

bean配置可以访问
setProducts
方法(例如使用
),这允许在启动时静态配置产品。之后,客户机代码通过其受限接口引用bean

您的
p.setProducts()
示例在本例中不应被调用,因为产品仅在bean配置中配置,而不是通过业务逻辑配置