从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框架》

全部评论

相关推荐

把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务