Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在春天实现自己的工厂_Java_Spring_Design Patterns - Fatal编程技术网

Java 如何在春天实现自己的工厂

Java 如何在春天实现自己的工厂,java,spring,design-patterns,Java,Spring,Design Patterns,我有三种或更多类型的请求,它们以JSON数据的形式出现并转换为object 假设有一个请求: { "id":1, "type":"0", "url": "http://stackoverflow.com" } 我想建立某种连接工厂,让我可以得到这样的页面: Request request = new Request(json); Response response = request.execute(); 当然,execute方法对于每个请求类型都有不同的实现 我有一个用纯J

我有三种或更多类型的请求,它们以JSON数据的形式出现并转换为object

假设有一个请求:

{
  "id":1,
  "type":"0",
  "url":
  "http://stackoverflow.com"
}
我想建立某种连接工厂,让我可以得到这样的页面:

Request request = new Request(json);
Response response = request.execute();
当然,
execute
方法对于每个请求类型都有不同的实现

我有一个用纯JavaSE编写的原型,我想迁移到Spring框架,如果我的代码有问题,我也会得到一些反馈。首先,我构建了一个
SimpleRequest
,它只获取页面并返回正文

class SimpleRequest implements Request{
    Package requestData;
    @Override
    public Connection.Response execute() throws IOException {
        Connection.Response response = Jsoup
                                           .connect(requestData.getUrl())
                                           .execute();
        return response;
    }

    public void bind(Package requestData){
        this.requestData = requestData;
    }
}
此方法仅获取页面。没什么有趣的

我还有准备请求的
RequestTemplate

class RequestTemplate{
    Package requestData;
    RequestFactory requestFactory = new RequestFactory();
    Request request;
    public RequestTemplate(Package requestData){
        this.requestData = requestData;
        try {
            request = requestFactory.getRequestInstance(requestData.getType());
            request.bind(requestData);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public Connection.Response execute(){
        Connection.Response connection = null;
        try{
            connection = request.execute();
        }catch (Exception e){
            e.printStackTrace();
        }
        return connection;
    }
}
此方法基于
RequestType
获取对象

当然,我有
RequestFactory
,它有对象的描述并创建它们的新实例

class RequestFactory{
    public Request getRequestInstance(RequestType type) throws Exception {
        switch (type){
            case SIMPLE:
                return new SimpleRequest();
            default:
                throw new Exception("Error");
        }
    }}
因此,我们检查与枚举列表匹配的
RequestType
类型,并返回新实例

我还想在基于Spring框架的小项目中实现类似的东西,有两个问题

  • 据我所知,上面的代码有点凌乱,存在一些性能问题。我想我会使用代码来提供大量的连接,因此我必须以某种方式优化它,因为内存限制等等

  • 与Spring的集成。这是一个框架,所以我认为应该有一些功能,可以让我的生活更轻松。我读过FactoryBean,但还没有掌握如何将其与我的任务联系起来。正如我上面提到的,代码有点凌乱,我认为我创建了很多抽象


  • 谢谢

    在什么意义上,这是更可取的,比如说,一个@Controller,它执行所有绑定,可能使用您自己的DataBinder,这样您的控制器方法就变成了
    public executersponse handleMyRequest(FirstRequest req)
    。看@Koosgadelala,我想我不明白什么。序列化json并绑定它没有问题。我使用gson来管理任务。这个问题与工厂和模板有关……我还认为,
    controller
    annotation只是一个Web应用程序,但我的应用程序是一个没有rest的独立应用程序。作为一个客户端,您是否查看了Spring的RestTemplate并注册了一些额外的
    HttpMessageConverter
    来构建您的响应?