前言
springboot也是spring公司开发的框架,目的是为了简化spring项目的初始化搭建
spring项目搭建缺点:配置麻烦 || 依赖 || tomcat启动速度慢
springboot特点
自动配置:springboot自动配置是一个运行时的过程,考虑众多因素,决定spring配置该用哪个,该过程是springboot自动完成
起步依赖:起步依赖本质是一个Maven项目对象模型,定义对其他库的传递依赖,这些东西加在一起即支持某项功能,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认功能
辅助功能:提供大型项目中常见的非功能性特性,如嵌入服务器,外部配置等
springboot常用的配置文件
配置文件分为yaml和properties两种格式 || 两种格式前缀名都应是application
如果两个文件同时存在,重复的内容采用properties文件,非重复内容会互相拼接
yaml
server:
port: 8080 #端口号
servlet:
context-path: /bbb #上下文路径
properties
server.port = 8080 #端口号
server.servlet.context-path=/aaa #设置上下文路径
java读取配置文件内容
springboot提供了两种注解用于读取配置文件信息的方式
#如配置文件信息 student: name: aa age: 18 sex: nan hobby: #list等非基本类型存储方法,也可用逗号swing,running效果相同 -swing #在properties中使用student.hobby[0]=swing student.hobby[1]=running 也可用逗号格式同上 -running
一、@ConfigurationProperties
使用在类上@ConfigurationProperties(prefix="信息前缀")
可一次解析所有该前缀属性信息
@ConfigurationProperties(prefix="student")
@Component //该类由spring创建,在创建时自动读取配置文件中前缀为student的属性
public class Student{
private String name;
private int age;
private String sex;
private List<String> hobby;
}
二、@Value
只能解析基本类型和字符串类型,一次解析一个属性
@Value("${student.name}")
private String name;
@Value("${student.age}")
private String age;
profile多环境配置
开发springboot时,通常同一套程序会在不同环境下使用,不同环境可能端口配置等都不相同,如每次打包都要修改配置文件会非常麻烦,可以用profile功能进行动态配置切换
首先创建文件
在原有application文件的基础下继续创建(application-后名字不固定,跟随自己起名特点): application-dev.properties --开发环境配置文件
application-test.properties --测试环境配置文件
application-pro.properties --生产环境配置文件
将相同内容放入原properties中,需要在不同环境下更改的信息放入对应配置文件中
激活方式
分为两种:一种是在配置文件中启用,一种是部署时通过命令行参数激活
//一、application配置文件中启用
spring.profiles.active=pro //test || dev 使用-后名字即可
//二、jar包部署时通过命令行参数激活
java -jar xxx.jar --spring.profiles.active=dev
springboot注册web组件
web组件就是servlet.filter组件
用springboot之前的servlet步骤: 1、创建一个类并继承HttpServlet重写service方法
2、注册web.xml文件
<servlet> <servlet-name></servlet-name> <setrvlet-class>自己的servlet或第三方</setrvlet-class> </servlet> <servlet-mapping> <servlet-name></servlet-name> <url-partern></url-partern> </servlet-mapping>
创建一个Servlet
public class Servlet extends HttpServlet{
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
sout("代码块")
}
}
Config包下创建ServletConfig
访问/my路径测试
@Configuration //表示该类为配置类,和xml配置文件效果相同
public class ServletConfig{
@Bean //等价于<bean>标签.
public ServletRegistrationBean myServlet(){
ServletRegistrationBean bean=new ServletRegistrationBean();
bean.setServlet(new Servlet());
bean.setName("my");
bean.setLoadOnStartup(1);
bean.addUrlMappings("/my");
return bean;
}
}
springbot包扫描的原理
springboot自带包扫描功能。核心在主类的@SpringBootApplication上,它是一个复合注解。里面包含@EnableAutoConfiguration开启自动配置,更深一层又包含@AutoConfigurationPackage,@Import({AutoConfigurationPackages.Registrar.class})需要导入一个自动配置包的类。加载主类所在的包,并按照该包进行扫描。
如果不想使用该包扫描可以在主类上使用ComprntScan(bassPackages={路径})来指定自己的包
springboot自动装配原理(面试题)
在run方法中传入SpringBootApplication注解类,该类包含EnableAutoConfiguration注解,开启自动配置功能,其中包含import注解,该注解需要导入AutoConfigurationImportSelector自动配置选择器类,该类会自动装载一些自动配置类,这些配置类会完成相应的自动装配