ToB企服应用市场:ToB评测及商务社交产业平台

标题: SSM框架中各层次作用及其关系(一) [打印本页]

作者: 锦通    时间: 2024-2-3 09:38
标题: SSM框架中各层次作用及其关系(一)
SSM框架中各层次作用及其关系(一)

平常学习生活中看见许多框架中的层次,都会有点懵,不知其意,抑或是看了又忘,所以这就是这篇短文的目的
总体辨析

JAVASSM(Java Web Application with Spring, Spring MVC, and MyBatis)是一种基于Java技术栈的Web应用开发框架,结合了Spring、Spring MVC和MyBatis三大框架。在一个标准的JAVASSM项目中,通常会包含以下几个主要的层:
这些层的划分有助于项目的组织和维护,同时也符合分层设计的思想,使得各个模块之间的关系更加清晰,提高了系统的可维护性和扩展性。在实际项目中,可以根据具体需求进行适当的调整和扩展。
项目概览


上图是一个普通的SSM项目,其包括了 controller, dao, interceptor, pojo, service  等层次
DAO层

持久层:DAO层(mapper层)(属于mybatis模块)
IModuleDao
  1. package com.iflytek.dao;
  2. import com.iflytek.pojo.Module;
  3. import java.util.List;
  4. public interface IModuleDao {
  5.     List<Module> moduleList();
  6. }
复制代码
这段代码定义了一个名为IModuleDao的接口,该接口中有一个方法moduleList()。这个方法返回一个Module对象的列表。
在Java中,接口是一种特殊的抽象类型,它只包含抽象方法和常量。接口不能被实例化,但可以被其他类实现(即提供具体实现)。在这个例子中,IModuleDao接口被设计为提供对模块列表的访问。
任何实现了IModuleDao接口的类都需要提供moduleList()方法的具体实现,以便能够返回一个模块列表。这样,我们就可以使用这个接口来获取模块列表,而不必关心这些模块是如何存储和管理的。
controller层

控制层/表现层:Controller层(Handler层) (属于springMVC模块)
MoudleController
  1. package com.iflytek.controller;
  2. import com.iflytek.pojo.Module;
  3. import com.iflytek.service.IModuleService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import java.util.List;
  9. @Controller
  10. public class ModuleController {
  11.     @Autowired
  12.     private IModuleService moduleService;
  13.     @RequestMapping("/moduleList")
  14.     @ResponseBody
  15.     public List<Module> moduleList(){
  16.         List<Module> moduleList = moduleService.moduleList();
  17.         return moduleList;
  18.     }
  19. }
复制代码
这是一个Java代码,用于创建一个名为ModuleController的控制器类。这个类使用了@Controller注解,表示它是一个Spring MVC框架中的控制器。
在这个类中,有一个名为moduleService的私有成员变量,它的类型是IModuleService,并且使用了@Autowired注解进行自动注入。这意味着在Spring容器中,会自动寻找一个实现了IModuleService接口的bean,并将其赋值给moduleService。
接下来,定义了一个名为moduleList的方法,该方法使用了@RequestMapping("/moduleList")注解,表示当用户访问/moduleList路径时,会调用这个方法。同时,该方法还使用了@ResponseBody注解,表示将方法返回的结果直接作为HTTP响应的内容,而不是通过视图解析器进行渲染。
在moduleList方法中,首先调用了moduleService的moduleList()方法,获取到一个Module对象的列表,然后将这个列表作为方法的返回值。
总之,这段代码的作用是创建一个控制器类,用于处理用户对/moduleList路径的请求,并返回一个Module对象的列表。
UploadController
  1. package com.iflytek.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.PostMapping;
  4. import org.springframework.web.bind.annotation.RequestParam;
  5. import org.springframework.web.bind.annotation.ResponseBody;
  6. import org.springframework.web.context.ContextLoaderListener;
  7. import org.springframework.web.multipart.MultipartFile;
  8. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  9. import java.io.File;
  10. import java.io.IOException;
  11. @Controller
  12. public class UploadController {
  13.     @PostMapping("/upload")
  14.     @ResponseBody
  15.     public String upload(@RequestParam("user") MultipartFile file) throws IOException {
  16.         System.out.println("获取文件的名称:"+file.getOriginalFilename());
  17.         System.out.println("获取文件大小:"+file.getSize());
  18.         //上传
  19.         file.transferTo(new File("d://img/"+file.getOriginalFilename()));
  20.        // CommonsMultipartResolver
  21.         //ContextLoaderListener
  22.         return "success";
  23.     }
  24. }
复制代码
这是一个Java Spring框架中的控制器类,用于处理文件上传请求。具体解释如下:
interceptor

interceptor拦截器        (属于SpringBoot模块)
MyInterceptor
  1. package com.iflytek.interceptor;
  2. import org.springframework.stereotype.Component;
  3. import org.springframework.web.servlet.HandlerInterceptor;
  4. import org.springframework.web.servlet.ModelAndView;
  5. @Component
  6. public class MyInterceptor  implements HandlerInterceptor {
  7.     @Override
  8.     public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
  9.         System.out.println(request.getRequestURL());
  10.         System.out.println("preHandle");
  11.         return true;
  12.     }
  13.     @Override
  14.     public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  15.         System.out.println("postHandle");
  16.     }
  17.     @Override
  18.     public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
  19.         System.out.println("afterCompletion");
  20.     }
  21. }
复制代码
这段代码是一个Java类,名为MyInterceptor,实现了HandlerInterceptor接口。HandlerInterceptor接口是Spring MVC框架中的一个接口,用于在请求处理过程中的各个阶段执行一些操作。这个类有三个方法:preHandle、postHandle和afterCompletion,分别对应请求处理过程的三个阶段。
比较复制插入新建收起
  1. @Override
  2. public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
  3.     System.out.println(request.getRequestURL());
  4.     System.out.println("preHandle");
  5.     return true;
  6. }
复制代码
比较复制插入新建收起
  1. @Override
  2. public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  3.     System.out.println("postHandle");
  4. }
复制代码
比较复制插入新建收起
  1. @Override
  2. public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
  3.     System.out.println("afterCompletion");
  4. }
复制代码
此外,这个类还有一个@Component注解,表示这是一个Spring组件,可以在其他地方自动装配并使用。
POJO层

普通JAVA对象
Moudle
  1. package com.iflytek.pojo;
  2. import lombok.Data;
  3. @Data
  4. public class Module {
  5.     private int id;
  6.     private String name;
  7.     private String imgUrl;
  8.     private String url;
  9. }
复制代码
这段代码是一个Java类,名为Module,用于表示一个模块。它使用了Lombok库的@Data注解,该注解会自动为类生成getter、setter、equals、hashCode和toString方法。
类中定义了四个私有成员变量:
service层

业务层:Service层(属于spring模块)
IMoudleService
  1. package com.iflytek.service;
  2. import com.iflytek.pojo.Module;
  3. import java.util.List;
  4. /**
  5. * @Author:JSJ
  6. * @DATE:2023/12/5
  7. * @Description:
  8. */
  9. public interface IModuleService {
  10.     List<Module> moduleList();
  11. }
复制代码
这段代码定义了一个名为IModuleService的接口,该接口中有一个方法moduleList()。这个方法的返回类型是List,表示它将返回一个包含Module对象的列表。
接口是一种抽象类型,它可以被实现(implemented)为具体的类。这意味着任何实现了IModuleService接口的类都需要提供moduleList()方法的具体实现。
MoudleService
  1. package com.iflytek.service.impl;
  2. import com.iflytek.dao.IModuleDao;
  3. import com.iflytek.pojo.Module;
  4. import com.iflytek.service.IModuleService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import java.util.List;
  8. @Service
  9. public class ModuleService implements IModuleService {
  10.     @Autowired
  11.     private IModuleDao moduleDao;
  12.     @Override
  13.     public List<Module> moduleList() {
  14.         return moduleDao.moduleList();
  15.     }
  16. }
复制代码
这是一个Java类,名为ModuleService,它实现了IModuleService接口。这个类主要用于处理与模块相关的服务。
impl

在Java的项目中,"impl" 通常是 "implementation" 的缩写,表示实现。在 Service 层中,命名为 "Service" 接口的实现类(implementation class)通常被命名为 "ServiceImpl",以明确它是接口的实现。
例如,如果有一个名为 "UserService" 的接口,那么它的实现类可能被命名为 "UserServiceImpl"。这是一种常见的命名约定,有助于提高代码的可读性和可维护性。
示例:
  1. javaCopy code// UserService 接口
  2. public interface UserService {
  3.     User getUserById(int userId);
  4.     void saveUser(User user);
  5.     // 其他方法...
  6. }
  7. // UserService 的实现类
  8. @Service
  9. public class UserServiceImpl implements UserService {
  10.     @Autowired
  11.     private UserDao userDao;
  12.     @Override
  13.     public User getUserById(int userId) {
  14.         return userDao.selectUserById(userId);
  15.     }
  16.     @Override
  17.     public void saveUser(User user) {
  18.         userDao.insertUser(user);
  19.     }
  20.     // 其他方法的实现...
  21. }
复制代码
在上述示例中,UserServiceImpl 类实现了 UserService 接口,提供了对用户的操作实现。这种命名约定有助于让项目的结构更清晰,使开发人员更容易理解代码的组织结构

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4