从servlet到mvc框架的演变

1 提出问题

在我学习servlet以后直接上手springmvc等框架会感觉这更本就是两个系统,不清楚其中的区别。下面我们一一解决这些疑惑。

2 IOC

2.1 注解

在目前的spring框架中,大量的注解,下面是一个@Service注解的声明定义的实现方式:
在这里插入图片描述

2.2 获取注解类

然后们就可以通过反射的方式获取到@Service注解的类。
在这里插入图片描述
其他的列如:@Bean,@Action,@Controller等等注解的实现方式类似。

2.3 依赖注入

下面就是IOC不同bean之间实现依赖注入:上面已经获取到所有的bean,放入到了一个map中
在这里插入图片描述

2.4 项目初始化

项目初始化的时候会将所有的工具类加载进来
在这里插入图片描述

2.5 mvc中的核心DispatcherSevlet

下面演示mvc框架中,如何由将框架代码转化为servlet的全过程。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 AOP

下面我们将用AOP解决一个问题:统计所有@Controller注解的类的运行时间。

AOP实质上就是需要操作的类用代理的带式拦截下来,统一一套代码来处理这些方法,生成增强的目标类。

3.1 CGlib代理

动态代理有一个好处就是如果代理的类原来的接口改变,动态代理类无需改变。但是这样就产生了一个问题,如果我们需要代理的对象没有接口如何代理呢?使用CGlib可以完美解决这个问题。

CGlib的代理时只需要对方法进行修改即可,无需传入代理的接口:
动态带来:
在这里插入图片描述

CGlib实现代理:
在这里插入图片描述

3.2 AOP

编写一个proxy代理接口:
在这里插入图片描述
proxyChain用于链式代理,按顺序一个一个执行代理对象,这样我们会先执行before方法,然后代理方法,最后after方法。
在这里插入图片描述
在这里插入图片描述

实现一个切面编程的抽象类作为模板:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拦截所有的controller
在这里插入图片描述
在这里插入图片描述
现在有一个proxyManager类,可以将代理的实现poxyList和需要代理的类对应起来生成一组新的代理实现。
在这里插入图片描述
在这里插入图片描述
最后初始化AOP(放入Bean map中使其可以被其他的bean IOC注入)
在这里插入图片描述
AOP的初始化:需要注意的是,AOPHelper在IOCHelper的前面,因为AOP可能代理了一些bean,后面这些bean的依赖注入还需要使用IOC。
在这里插入图片描述

参考文献:《架构探险-从零开始写java web框架》

发布了275 篇原创文章 · 获赞 42 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_35688140/article/details/91448164