识别 Spring MVC 架构模式

Identifying Spring MVC architecture pattern

我正在制作一个 spring mvc 视频系列并且喜欢它!

我想详细了解正在使用的确切架构的细节,但在确定正确的 名称 时遇到了困难 - 以便我可以进一步阅读。

例如,我知道表示层是 MVC,但不确定您将如何更具体地描述模式来说明服务和资源对象的使用 -而不是选择使用服务、DAO 和域对象。

有什么线索可以帮助我更好地将搜索重点放在理解下面的布局上吗?

application
  core
     models/entities
     services
  rest
     controllers
     resources
        resource_assemblers

编辑: Nathan Hughes 的评论澄清了我对命名法的困惑,SirKometa 将我没有掌握的架构点联系起来。谢谢你们。

我猜您正在寻找的架构模式是表述性状态转移 (REST)。你可以在这里阅读它:

http://en.wikipedia.org/wiki/Representational_state_transfer

在 REST 中,传递的数据称为资源:

Identification of resources: Individual resources are identified in requests, for example using URIs in web-based REST systems. The resources themselves are conceptually separate from the representations that are returned to the client. For example, the server may send data from its database as HTML, XML or JSON, none of which are the server's internal representation, and it is the same one resource regardless.

据我所知,您提到的布局代表了通过 REST 服务与世界通信的应用程序。

如果这就是您要找的答案,请告诉我。

This question may be of interest to you as well as this explanation.

您在每种情况下都在谈论相同的事情,Spring 只是使用注释,以便在扫描它们时知道您正在创建或实例化的对象类型。

基本上所有请求都流经用 @Controller. Each method process the request and (if needed) calls a specific service class to process the business logic. These classes are annotated with @Service 注释的控制器。控制器可以通过在@Autowire 中自动装配它们或将它们资源化@Resource 来实例化这些classes。

@Controller
@RequestMapping("/")
public class MyController {

    @Resource private MyServiceLayer myServiceLayer;

    @RequestMapping("/retrieveMain")
    public String retrieveMain() {

        String listOfSomething = myServiceLayer.getListOfSomethings();
        return listOfSomething;
    }
}

服务 class 然后执行其业务逻辑,如果需要,从使用 @Repository. The service layer instantiate these classes the same way, either by autowiring them in @Autowire or resourcing them @Resource 注释的存储库 class 检索数据。

@Service
public class MyServiceLayer implements MyServiceLayerService {

    @Resource private MyDaoLayer myDaoLayer;

    public String getListOfSomethings() {

        List<String> listOfSomething = myDaoLayer.getListOfSomethings();
        // Business Logic
        return listOfSomething;
    }
}

存储库 class 构成了 DAO,Spring 在它们上面使用了 @Repository 注释。实体是由@Repository 层接收的单个class 对象。

@Repository
public class MyDaoLayer implements MyDaoLayerInterface {

    @Resource private JdbcTemplate jdbcTemplate;

    public List<String> getListOfSomethings() {

        // retrieve list from database, process with row mapper, object mapper, etc.
        return listOfSomething;
    }
}

@Repository、@Service 和@Controller 是@Component 的特定实例。所有这些层都可以用@Component注解,最好按实际名称命名。

所以回答你的问题,它们的意思是一样的,它们只是被注释让 Spring 知道它正在实例化什么类型的对象 and/or 如何包含另一个 class .