比如,咱们一般写的web程序,就是war包,实际上是放到tomcat中运行,那么tomcat有一个唯一的入口去加载这些东西的
然后运行的时候开启监听,来调用其他的访问
实际上也是唯一入口的
springboot内部是集成了tomcat的,可以不安装tomcat的
一般开发和测试的时候,都是使用内部集成的,用起来比较方便,启动也快,也不用操心部署什么的
这个唯一的入口,就是application
和一般的main方法是一码事
只是,这个类的名字是随意的,并不是必须是什么固定的名字
官方用的是application,我用的是apprun
因为application有不少人不认识,而apprun认识就相对容易的多
主要来说,springboot的启动入口,就是加载一个springboot内置的一个类,这个类就是springboot的默认配置方式了
和以前的ssh或ssm项目不同,使用约定大于配置的方式来执行的
因此,他遵循一般的约定
比如,分层架构,比如MVC结构,比如默认配置resource内,比如静态内容对外暴露只有一个入口等等的
所以,这个约定上来说,springboot启动的时候,你发现里面加载了一些内容
这个内容就是你做这个application类的类名
也就是说,通过这个类名,找到该类的位置,从这个位置,从此至下的一层一层搜索java文件或者是静态的配置文件
因此,application这个java文件,是放在根目录之内的
根目录,意思是最上层目录
例如:com.example.src
前两个包都是空的
所以src就是根目录了
example一般是项目名
约定的分类,如下主要分为三种
第一种是main,即主程序和必须程序所在的包
第二是resources,静态资源和配置文件所在的位置
第三是test,测试接口和测试文件所在的包
那么,他搜索其他的配置,依据包括几个
第一,是properties文件,就key-value的配置文件
第二,是yarn文件,暂时不管,和配置文件是一码事,只是格式不同
第三,是xml文件,老配置方式了,xml配置比较清晰,但是写起来比较麻烦,读取内容也挺多,需要调用的包也挺多
第四,是java文件
而要识别该java文件是否是配置文件,取决于标记该java文件是否要写成一个bean,注入到spring的bean内存管理中
要让spring识别一个java类为spring的bean,并加载到内存管理中的话
学校学的,一般是xml配置
比如 spring.xxx.xml文件
内部有bean标签
也可能有config标签
这些就是bean的xml配置方式,告诉spring,这个bean是什么名字,是哪个类,何时加载,等等的
在这之后,大家使用了注解方式来进行标记,代替了大部分的xml配置
也就是说,在一个java类上写上@bean,或者其他的spring注解,告诉spring这个是个bean
那么需要配置一下 scan,就是扫描器,来配置扫描哪个包,来寻找这个包下的注解
发展到目前的springboot,不配置扫描的包了,默认扫描该application下的所有文件
成了一种约定的方式了
关于扫描
叫 component scan或者scope scan
组件扫描或者域扫描的意思
在spring中会有这个配置,在使用xml的时候,这个扫描配置,一般还是在spring的最优先的配置呢
然后,spring通过认识了@bean,或者其他的扫描的注解,知道将这个java文件,同构反射调用,写入内存,然后别人可以通过这个bean的类名,或者这个bean指定的一个key来访问这个bean,拿到这个bean内的某个变量,或者某个算法加工后的变量
在目前的springboot中,常见的直接加载的配置,主要使用的是@configuration注解
就是我给你的项目中的config包下,所有的类都有这个注解,保证是服务器启动即加载的
类似的启动即加载的注解,还有很多,只是,功能都完全相同,完全的相同,只是名字不同,他们都是直接在application启动的时候加载,仅此而已
关于bean,pojo,java bean都可当做没有中文
他们是程序构成的最基础的一个class
这个基础的class,功能可以写的前边万花,但是再变化,也都是有个输入参数,加工方式,输出参数构成
在OOP说法中,是由类,包裹变量,加上构造方法,方法构成的东东
和你以前写的什么猫类狗类是一个东西
但是这个不叫做java文件
也不叫做class文件
因为,java文件是文本,class是编译后的可以被jvm读取的文件
而bean,pojo,javabean这种,是某个class加载进内存后,被实例化的对象
可以理解为,java是给人看的死文件,class是给jvm给机器看的死文件
而bean这种,是活着的,等待使用或者正在使用中的内存对象
总结一下
springboot的application在启动以后,实例化了自身的默认配置,启动了一个内置的tomcat,然后使用默认的配置扫描你写的所有的配置,各种方式的配置都扫描,然后装配到bean中,或者作为某些变量赋值给tomcat的配置中,然后开启各种监听,等待被调用