跳过正文
  1. 博客/
  2. 后端/
  3. 框架/

浅析Spring

3 分钟· ·
后端 框架 Java SpringBoot
作者
Allen
一个强大、轻量级的 Hugo 主题。
目录

 > Spring核心就是IoC(依赖注入)AoP(面向切面)本篇就基于一个开源项目 tiny-spring 来分析Spring框架到底给我们提供了什么东西

依赖注入是什么呢,说起来非常简单就是系统帮你把依赖组装好,我们来举个简单例子

        class People { Hand hand;};

上面是一个非常简单的类,Spring把这个类叫做Bean,这个People 的 Bean 依赖一个Hand的类,我们来看一下这个Hand类

       class Hand { Finger finger; int num};

  上面的Hand又依赖一个Finger类,而且提供了一个属性:手的num(数目),假如你要使用这个People类,你得新建3个类,而且得把代码写死,而Spring就是通过xml或者注解来帮你把这些类自动创建,所以才叫依赖注入,其实原理也非常简单

为啥要提供这个功能呢,因为我们希望通过配置这些xml就能实现不同的xml来实现不同的功能类,而不用修改代码重新编译,你可以理解为就是代码是高度松耦合,我们可以提供很多相同接口的组件给用户用,用户用的时候只需要修改配置文件就能实现灵活组合不同模块的功能

我们知道对于一个HTTP服务器,我们希望调用这个接口方法之前能对用户发的东西做一个核验,就像拦截器一样,但是Java里面怎么实现呢,就是调用一个方法之前调用一个特定方法,我们有两种方法,第一种就是定死类名,在调用所有方法之前就调用这个东西,第二张就是重新继承这个方法,在调用父方法之前或者之后在调用我们想调用的方法

显然第一种太蠢了,我们得先判断这个方法不存在,第二种可以使用Java Proxy类来实现(当然有局限只能是接口,可以用动态生成的类比如Cglib来做),我们而且可以把那个想注入的方法也看作一个特殊的bean(默认在普通的bean之前就做好),这样最终我们把普通的bean使用IoC容器给初始化,然后在用代理类把这个bean继承出来

这样我们就实现了一个高度控制的类方法,而Spring最主要就是要组装一个Servlet类来处理不同路径下面的请求,网络处理那些事情都交给Tomcat来处理了,所以其实Spring的职责也很简单,就是组装,最后根据组装模块来响应Tomcat发过来的request,返回一个response,因为Spring需要生成很多类,而且假如你使用为了支持注解,Spring还得使用反射来获取所有类的注解,反射速度也是非常慢的,所有Spring启动一般需要一点时间,甚至比其他框架比如Python还要慢,不过这些类的生成都是一次性的(不是单例除外),生成完之后就可以直接使用这些生成好的类的方法来响应Tomcat请求了

资料
#

https://github.com/code4craft/tiny-spring/blob/master/changelog.md

相关文章

从例子里解Spring IOC
7 分钟
后端 框架 Java SpringBoot
浅析微服务
5 分钟
后端 框架 Java
如何在Ubuntu上发布Scala Jar包到Maven中央仓库
7 分钟
后端 框架 Java
Learning Scala From Java
3 分钟
后端 框架 Java
Java的char类型到底几个字节
6 分钟
后端 框架 Java
大数据架构小结
4 分钟
后端 框架 大数据