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

浅析Spring

·3 分钟· ·
后端 框架 Java SpringBoot
目录

 > 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
Spring的IOC理解 # 什么是IOC # 在这里我们不谈Spring的基础知识,我们知道谈到Spring就会谈到IOC,这个IOC是什么呢,中文名叫控制反转,这个东西是伴随着一些编程思想出现,其实同Java的本身也有关
浅析微服务
·5 分钟
后端 框架 Java
这篇博客主要是从web技术发展来探索微服务的起源 要想了解微服务是什么得从web框架出来之后开始讲起,大部分可能不知道微服务,一定知道写web服务的框架,懂Java的可以用Spring Boot一把梭,懂Python的Flask、Django、Tornado也写的飞起
如何在Ubuntu上发布Scala Jar包到Maven中央仓库
·7 分钟
后端 框架 Java
由于网上的教程大多数是Windows下的,而且都是介绍怎么打包Java的Jar包,关于Scala相关的比较少,因此我踩了不少坑才成功的把包发布到Maven中央仓库,你们可以才中央仓库里面搜到我的包
Learning Scala From Java
·3 分钟
后端 框架 Java
Recently I had finshed reading one book : « Scala for The Impatient», I found a lot intrest thing during reading this book.Cause I had known Python and Java before, I can see mixed fetures of Scala between Python and Java.This blog is my thought of studying a new language from other learned language.
Java的char类型到底几个字节
·6 分钟
后端 框架 Java
引言 # 之所以有这个疑问,是上次阅读Java基础书时碰到讲解char类型没有看明白,并且在代码验证过程中错误的理解了代码的意思,导致我对这么个简单问题产生疑惑并且“恶意揣测”Java内部的黑魔法,这里就把我如何走上歪路,并且最终找到“正确”的道路的故事讲出来
大数据架构小结
·4 分钟
后端 框架 大数据
首先说说什么是大数据,最简单用数据量为单位,大于1亿就算大的,因为小于1亿就在数据库做就可以了,所以大数据是公司数据大到数据库处理不了的时候才要考虑的事情,小公司MySQL优化一下索引就可以了