一张图看懂什么是MVC,三层结构,AOP,IOC。以及他们的区别与联系

本文深入解析软件架构中的三层结构、MVC和AOP概念,阐述它们之间的关系及如何影响软件设计。通过生动比喻,帮助理解各部分功能与流程,探讨了软件设计模式在实际开发中的应用。

废话不多说,先上图

这张图讲的是一个软件的整体结构,看上去很乱,我来解释下都表示些什么

  1. 最外层土黄色矩形是指三层结构
  2. 绿色矩形代表AOP
  3. 土黄色矩形是MVC
  4. 蓝线表示请求流程
  5. 青线表示返回流程
    在这里插入图片描述

这个图说明三层结构MVCAOP之间的关系

整个软件我们可以看成一个豆腐块

  • 我们横向切三刀,这种切法就是三层结构
    切出的是一个软件中一个功能是如何实现的
  • 我们纵向切若干刀,这种切法就是AOP。
    那么每形成一个小的竖直豆腐块,都是代表一个模块。当然如果你也可以把豆腐块看成一个模块,那小豆腐块就是一个个功能了
    AOP不但可以竖着切,也可以横着切,而横着切的AOP3则代表软件中会被其他模块依赖的模块,比如用户状态,购物车状态等
  • 所以AOP和三层结构都是软件的设计模式,只不过出发的角度不同罢了,一个专注于软件功能的分割,另一个是对软件功能实现过程的分层
  • MVC,在图中可以看到MVC在三层结构中其实是被拆分了,c和v在表示层,而model比较特别,他其实是一块砖,哪里用哪里搬。model的作用就是用作数据容器使用,所以其实model的存在并不固定,而我们起一个实体类对象一般在业务代码中,所以我就将model放在那里了。
  • 可能会有人问:为什么老是感觉MVC和我实际编写的代码对不上?
    这其实是一个历史问题,三层结构之前还有两种开发模式被迭代了:model1和model2,而这两个是完全和MVC匹配的,到了Model2末期,为了进一步解耦才出现了三层结构,但是MVC的说法确沿用下来了,现在也没有用纯MVC模式开发的,多少会用到其他方式辅助开发

那IOC呢?

简单来讲,框架的运作原理就是IOC,而我们最多就是配置下框架,所以在我们工作中其实很少去实际接触IOC,IOC原理就是用框架来决定何时创建对象,比如那些工厂类的对象,这些工厂类是和软件运行时候有关。所以可以知道的是IOC并不关注软件的设计阶段,而是关注软件的运行阶段

<think> 我们继续讨论零基础小白完成五个项目所需的基础知识。以下将分模块讲解每个项目涉及的核心概念和前置知识,帮助小白建立知识体系。 ### 一、创建Spring MVC项目(XML配置) **前置知识**: 1. **Java基础**:类、接口、注解(如`@Controller`)、Servlet API 2. **Maven**:项目构建工具,用于管理依赖(`pom.xml`配置) 3. **Servlet容器**:Tomcat服务器部署原理 4. **Spring MVC核心组件**: - `DispatcherServlet`(前端控制器) - `ViewResolver`(视解析器) - `@GetMapping`注解路由映射 5. **JSP**:Java Server Pages动态页面技术(EL表达式`${}`) **学习重点**: - `web.xml`中配置`DispatcherServlet` - 视解析器的`prefix`和`suffix`设置 - 控制器方法通过`Model`对象传递数据到视 ### 二、SSM整合项目(XML配置) **新增知识**: 1. **Spring IoC/DI**: - XML配置`<bean>`定义 - 依赖注入(`<property>`或`@Autowired`) 2. **MyBatis框架**: - `SqlSessionFactory`配置 - Mapper接口XML映射文件(如`UserMapper.xml`) 3. **Spring整合MyBatis**: - `MapperScannerConfigurer`自动扫描Mapper接口 - 数据源配置(`DriverManagerDataSource`) 4. **事务管理**(可选): - 声明式事务配置(`<tx:annotation-driven>`) **典型问题**: - 确保MyBatis的`mapper.xml`文件位于`resources/mapper/`目录 - 数据库连接参数正确性(驱动类名、URL格式) ### 三、SSM整合项目(注解+配置类) **配置方式转变**: 1. **Java配置类替代XML**: - `@Configuration`标记配置类 - `@Bean`注解定义Bean(如`DataSource`) 2. **组件扫描**: - `@ComponentScan("com.example")`自动注册Bean 3. **Web配置**: - 继承`AbstractAnnotationConfigDispatcherServletInitializer`初始化容器 - 重写`getRootConfigClasses()`指定配置类 4. **MyBatis整合优化**: - 使用`SqlSessionFactoryBean`构建会话工厂 - `MapperScannerConfigurer`以Java配置形式声明 **优势**: - 类型安全的配置(编译时检查) - 避免XML配置的冗余 ### 四、Spring Boot基础项目 **核心概念**: 1. **自动配置**: - 约定优于配置(如默认端口8080) - `@SpringBootApplication`组合注解(包含`@ComponentScan`) 2. **起步依赖**(Starter): - 一键添加功能依赖(如`spring-boot-starter-web`) 3. **独立运行**: - 内嵌Tomcat(无需外部部署) - `main`方法启动:`SpringApplication.run(App.class, args)` 4. **配置简化**: - `application.properties`/`application.yml`集中管理配置 **开发流程**: 1. 通过[start.spring.io](https://start.spring.io)生成项目骨架 2. 直接编写带`@RestController`的控制器 3. 运行`main`方法即启动完整Web应用 ### 五、SpringBoot+MyBatis+Thymeleaf **技术栈整合**: 1. **MyBatis整合**: - 使用`mybatis-spring-boot-starter`自动配置`SqlSessionFactory` - `@Mapper`注解或`@MapperScan`扫描接口 2. **Thymeleaf模板引擎**: - 自然模板(HTML5兼容) - 表达式语法:`th:text="${user.name}"` 3. **数据访问流程**: ```mermaid graph LR A[Controller] -->|调用| B[Service] B -->|调用| C[Mapper] C -->|SQL执行| D[数据库] D -->|返回数据| C --> B --> A A -->|添加模型| E[Thymeleaf模板] ``` **关键配置**: ```properties # application.properties spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html mybatis.mapper-locations=classpath:mapper/*.xml ``` ### 零基础学习路径建议 | 阶段 | 学习内容 | 目标 | |------|----------|------| | 1 | Java SE基础 | 掌握类、接口、集合、异常处理 | | 2 | Servlet/JSP | 理解Web请求响应模型 | | 3 | Maven/Gradle | 项目构建依赖管理 | | 4 | Spring Core | IoC容器Bean生命周期 | | 5 | 数据库JDBC | SQL基础Java数据库操作 | | 6 | MyBatis | ORM框架使用映射配置 | | 7 | Spring MVC | 控制器开发渲染 | | 8 | Spring Boot | 自动配置快速开发实践 | > **提示**:实际操作中遇到问题可查阅: > - [Spring官方文档](https://spring.io/projects/spring-framework) > - [MyBatis指南](https://mybatis.org/mybatis-3/zh/index.html) > - Thymeleaf教程:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html §§相关问题§§ 1. Spring Boot中如何自定义自动配置? 2. MyBatis的一级缓存和二级缓存有什么区别? 3. Thymeleaf模板如何处理表单提交数据? 4. 如何为Spring Boot应用添加用户认证功能? 5. 在SSM项目中如何进行分页查询? </think> ### 零基础小白完成五个项目需掌握的基础知识 #### 一、Java 核心基础 1. **Java 语法基础**: - 数据类型、变量、运算符 - 流程控制(if/else, for, while) - 面向对象:类对象、封装、继承、多态 - 集合框架(List, Map) - 异常处理机制 2. **Maven 项目管理**: - `pom.xml`依赖配置 - 项目结构标准(src/main/java, src/main/resources) - 常用命令:`mvn clean install` #### 二、Web 开发基础 1. **HTTP 协议**: - GET/POST 请求区别 - 状态码(200, 404, 500) - 请求头/响应头 2. **Servlet/JSP**: - Servlet 生命周期 - JSP 基本语法(EL表达式) - Web 容器(Tomcat)工作原理 #### 三、Spring 框架核心 1. **IoC 控制反转**: - Bean 生命周期管理 - 依赖注入(构造器注入、Setter注入) - `@Autowired` 注解使用 2. **AOP 面向切面**: - 切点(Pointcut)定义 - 通知类型(Before, After) - 日志/事务管理实现原理 #### 四、数据库持久层 1. **SQL 基础**: - CRUD 操作(SELECT, INSERT, UPDATE) - 表关联查询(JOIN) - MySQL 安装配置 2. **JDBC 连接池**: - `DriverManager` 使用 - `PreparedStatement` 防SQL注入 - 连接池配置(DBCP, HikariCP) 3. **MyBatis 核心概念**: - Mapper 接口 XML 映射 - `#{}``${}`区别 - 结果集映射(ResultMap) #### 五、视层技术 1. **JSP 进阶**: - JSTL 标签库使用 - 自定义标签开发 - MVC 分层架构理解 2. **Thymeleaf 模板引擎**: - 标准表达式语法(`${}`, `*{}`, `#{}`) - 常用属性(`th:text`, `th:each`) - 模板布局(`th:fragment`) #### 六、Spring Boot 特性 1. **自动配置原理**: - `@SpringBootApplication` 组合注解 - 条件注解(`@ConditionalOnClass`) - 外部化配置(application.properties) 2. **Starter 依赖**: - `spring-boot-starter-web` - `mybatis-spring-boot-starter` - `spring-boot-starter-thymeleaf` #### 七、开发工具链 | 工具类型 | 推荐工具 | 核心用途 | |----------------|-------------------|----------------------------| | IDE | IntelliJ IDEA | 代码编写调试 | | 数据库工具 | DBeaver | SQL执行结构管理 | | API 测试 | Postman | 接口调试 | | 版本控制 | Git + GitHub | 代码版本管理 | #### 八、学习路径建议 ```mermaid graph TD A[Java基础] --> B[数据库/SQL] B --> C[Servlet/JSP] C --> D[Spring IoC/AOP] D --> E[Spring MVC] E --> F[MyBatis] F --> G[Spring Boot] G --> H[Thymeleaf] ``` > **关键提示**: > 1. 从项目一(Spring MVC基础)开始逐步递进 > 2. 每个项目完成后立即进行功能测试(如项目二的`testService()`[^1]) > 3. 配置文件(XML/注解)是核心,需理解每行配置的作用 > 4. 数据库操作阶段先确保SQL在工具中能执行,再写入代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值