Web应用技术期末复习
- 一、MVC
- MVC概述:
- 二、Spring:
- Spring概述:
- (1)依赖注入(Dependency Injection):
- (2)控制反转(Inversion of Control):
- (3)面向切面编程(Aspect-Oriented Programming):
- 目标对象:
- 通知:
- 代理对象:
- 运行效果:
- 三、SpringMVC:
- (1)对how2j运行原理图理解:
- (2)自绘SpringMVC工作原理流程图:
- 四、Maven:
- Maven概述:
- 五、Mybatis:
- Mybatis概述:
- 六、SSM:
- (1)对how2j的运行原理图的理解:
- (2)自绘SSM工作原理流程图:
- 七、SpringBoot:
- (1)SpringBoot概述:
- (2)SpringBoot如何启动:
- 八、SSM:
- (1)SSM概述:
- (2)SSM运行原理图:
- (3)自绘制SSM工作原理流程图:
- 九、基于SSM的CRUD:
一、MVC
MVC概述:
点击获取清晰思维导图
更多内容可查看:
- Web应用技术(第八周/第一次练习/0.5h)
- Web应用技术(第八周/第二次练习/4h)
二、Spring:
Spring概述:
点击获取清晰思维导图
(1)依赖注入(Dependency Injection):
依赖注入(Dependency Injection,DI)是一种实现控制反转(Inversion of Control,IoC)的方式,它是Spring框架的核心功能之一。
简单来说,依赖注入指的是要实例化的对象的相关配置已经写好,我们只是通过某些手段(见依赖注入的两种方式)将其注入到相应的属性或在方法中,而不需要再重新new了。
可参考控制反转的示例进行理解。
(2)控制反转(Inversion of Control):
控制反转(Inversion of Control,IoC)是Spring框架的一个核心概念,指的是将对象的创建、组装和管理等控制权从应用程序代码中转移到框架或容器中,从而实现松耦合、可扩展和可维护的设计。
在传统的应用程序设计中,应用程序代码通常会负责创建和管理对象,这样会导致应用程序代码和对象之间的紧耦合,难以进行单元测试和代码重构。而控制反转则是将这些控制权转移到框架或容器中,让它们来负责对象的创建和管理,从而实现应用程序代码和对象之间的解耦和灵活性。
举一个简单的例子:
// OrderDAO类
public class OrderDAO {
// 数据访问实现
}
// OrderService类
public class OrderService {
private OrderDAO orderDAO; // 依赖注入的对象
public void setOrderDAO(OrderDAO orderDAO) { // Setter方法注入
this.orderDAO = orderDAO;
}
// 其他业务方法
}
// Spring配置文件
<bean id="orderService" class="com.example.OrderService"> <!-- 定义OrderService对象 -->
<property name="orderDAO" ref="orderDAO" /> <!-- 通过依赖注入方式使用OrderDAO对象 -->
上述的例子中,假设有一个订单服务类OrderService,它需要依赖一个订单数据访问对象OrderDAO来实现订单数据的持久化。在传统的设计中,OrderService需要自己创建和管理OrderDAO对象,这样会导致OrderService和OrderDAO之间的紧耦合,难以进行单元测试和代码重构。而在使用Spring框架的控制反转功能后,可以将OrderDAO的创建和管理交给Spring容器来完成,然后在OrderService中通过依赖注入的方式来使用OrderDAO对象,从而实现了松耦合和可测试的设计。
(3)面向切面编程(Aspect-Oriented Programming):
Spring AOP 是 Spring 框架的一个模块,它提供了面向切面编程的支持。Spring AOP可以让我们将应用程序中的关注点(如日志记录、事务管理、安全控制等)从业务逻辑中分离出来,然后通过特定的技术将这些关注点模块化,最终将其组合成一个完整的应用程序。
Spring AOP相关术语:
- 切面(Aspect):切面是一个模块化的关注点,它可以横向切割应用程序,将不同的关注点分离出来,比如日志记录、事务管理、安全控制等。可类比于一个瑞士军刀,每个刀片都是不同的关注点,可以单独使用,也可以组合使用。
- 连接点(Join Point):连接点是程序执行过程中可以插入切面的点,比如方法的调用、异常的抛出等。可类比于电路中的插头,连接点就是插头的位置。
- 通知(Advice):通知是在连接点上执行的操作,它可以在连接点的前、后、或者抛出异常时执行。比如在方法执行前记录日志、在方法执行后进行事务提交等。可类比于电器的开关,通知就是开关的操作。
- 切入点(Pointcut):切入点是连接点的集合,它定义了哪些连接点需要被切入切面。比如对所有的 Service 层方法进行事务管理。可类比于筛子,切点就是筛子的孔。
- 目标对象(Target):所有被通知的对象(也可以理解为被代理的对象)都是目标对象,目标对象及其属性改变、行为调用和方法传参的变化被AOP所关注。
- 织入(Weaving):织入是指将切面与目标对象结合起来,创建一个新的代理对象的过程。
- 引入(Introduction):引入是为类添加新的方法或属性等。比如为一个类添加一个新的接口。可类比于人的学习能力,引入就是学习新技能。
目标对象:
Target.java:
package com.mr.target;
public class Target {
//程序执行的方法
public void execute(String name){
System.out.println("执行execute()方法:" + name);//输出信息
}
}
通知:
LoggerExcute.java:
package com.mr.log;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class LoggerExecute implements MethodInterceptor {
// 实现 MethodInterceptor 接口,该接口提供了拦截方法调用的方法
public Object invoke(MethodInvocation invocation) throws Throwable {
before(); // 执行前置通知
invocation.proceed(); // 执行原始方法
return null; // 返回 null
}
// 前置通知方法
private void before() {
System.out.println("程序开始执行!");
}
}
代理对象:
Manager.java:
package com.mr.main;
import org.springframework.aop.framework.ProxyFactory; //导入Spring AOP的ProxyFactory类
import com.mr.log.LoggerExecute; //导入日志记录的Advice类
import com.mr.target.Target; //导入目标类
public class Manager {
//创建代理
public static void main(String[] args) {
Target target = new Target(); //创建目标对象
ProxyFactory di=new ProxyFactory(); //创建ProxyFactory对象
di.addAdvice(new LoggerExecute()); //添加Advice对象
di.setTarget(target); //设置目标对象
Target proxy=(Target)di.getProxy(); //获取代理对象
proxy.execute("AOP的简单实现"); //代理执行execute()方法
}
}
当我们运行主类Manager
时,首先会创建一个目标对象,我们所要实现的核心功能包含在这个目标对象中,接着实例化一个工厂类 ProxyFactory
,即di
我们可以通过它来设置目标对象、添加 Advice 对象等来创建代理对象,在这里,我们通过 di.setTarget(target)
方法设置了目标对象,通过 di.addAdvice(new LoggerExecute())
方法添加了一个 Advice 对象,最后通过 di.getProxy()
方法获取代理对象,即一个“四肢健全”的程序,有核心部分,有细枝末节,最后调用代理对象的excute()
方法,实现一次输出。代理对象是目标对象的扩展,所以它仍然具备目标对象的方法。
运行效果:
更多内容可查看:
- Web应用技术(第十四周/END)
三、SpringMVC:
(1)对how2j运行原理图理解:
(2)自绘SpringMVC工作原理流程图:
四、Maven:
Maven概述:
五、Mybatis:
Mybatis概述:
六、SSM:
(1)对how2j的运行原理图的理解:
(2)自绘SSM工作原理流程图:
七、SpringBoot:
(1)SpringBoot概述:
(2)SpringBoot如何启动:
八、SSM:
(1)SSM概述:
(2)SSM运行原理图:
(3)自绘制SSM工作原理流程图:
九、基于SSM的CRUD:
本博客主要整理期末考试的考点,更多具体内容可参考每部分后所附的博客链接。