SpringBoot作用
搭建程序的脚手架,可以快速的帮助我们搭建一个spring项目,尽可能的减少XML配置,做到开箱即用,让我们关注业务而非配置
springBoot的优点:
1.创建独立运行的Spring引用程序
2.可嵌入tomcat,不用设置war包
3.简化Maven配置
4.自动配置Spring
5.不要求配置XML
6.容易和第三方框架集成起来
7.有日志,健康检查等
缺点
版本更新快,对程序员不太友好
约定大于配置
开发流程
1.创建项目
maven项目
<!--添加继承关系-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
</parent>
2.导入场景
场景启动器
<dependencies>
<!--添加启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--添加web项目相关的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3.主程序
@SpringBootApplication
public class MainApplication {
//运行的主程序
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
5.测试
6.打包
<build>
<plugins>
<!-- Spring Boot 打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
将项目达成可执行的jar包
执行jar包运行项目的 方法:java -jar 包名
特性小结
1.简化整合
管理各种依赖的版本
spring-boot-starter-parent
导入相关的场景,拥有相关的功能,场景启动器
官方的场景: 命名为:spring-boot-starters-*
场景一导入,万物皆就绪
2.简化开发
无需要编写任何配置,直接开发业务
3.简化配置
使用application.properties:
集中式配置,只需要修改这个文件就行
配置有默认值
4.简化部署
打包为可执行的ar包
Linux服务器上有Java环境
问题
-
当前项目继承的 spring-boot-starter-parent 项目有什么用?
这是一个父工程,用于管理各种依赖的版本,不用担心版本不一致的情况
-
导入的依赖 spring-boot-starter-* 有什么用?
这里是引用的启动器,免去了框架的其他配置,需要什么板块的就添加什么版块的
-
占用 8080 端口的 Tomcat9 服务器哪来的?
该服务器识启动器里面自带的,默认的端口号就是8080
-
之前的 Web 应用打包是 war,为什么现在的打包方式是 jar?
打成war包需要添加更多的依赖,使用jar包可以脱离idea运行
-
@SpringBootApplication 注解有什么用?
扫描主程序的包极其子包的问价
-
main 方法中执行的代码 SpringApplication.run(…) 有什么用?
这是主程序的入口,启动web程序
JavaConfig常用的注解
**1.@Configuration:**告诉spring这是一个配置类,和application,xml作用一样
**2.@ Bean:**第一次调用时就创建这个对象,并将这个对象放在容器中,下一次就直接从容器中拿,将对象给spring管理
使用里面的方法名作为这个Bean’的名称,这个是单例,里面可以写初始化方法
@Configuration //表示当前是一个配置类,相当于applicationContext.xml
public class MyConfig {
//配置连接池的时候需要这两个属性
@Bean(initMethod = "init",destroyMethod = "destroy") //将该方法的返回值交给Spring容器管理
public SomeBean someBean(){
return new SomeBean();
}
}
**@ComponentScan:**用于扫描带有"component"注解的包创建bean,通过扫描这些包避免了使用@Bean创建很多bean,更加便捷,写在配置类中 component贴在需要创建对象的类上
@Component
@Setter
@Getter
public class SomeBean {
}
@Configuration // 表示该类是 Spring 的配置类
@ComponentScan // 开启组件扫描器,默认扫描当前类所在的包,及其子包
public class JavaConfig { }
**3.@Scope(“prototype/singto”)😗*给对象设置作用域,单例还是多例
**4.@SpringBootApplication:**组件扫描只扫描主程序的包及其子包下的文件
**5.@PostConstruct:**初始化注解
**6.@PreDestroy:**销毁的注解, 只有销毁单例能手动销毁,多例会自动销毁
7.@Import(BConfig.class) :导入其他的配置类,配置文件之间的关联
@Configuration
@Import(BConfig.class) //导入1其他的配置类,配置文件之间的关联
public class AConfig {
@Bean
public SomeBean someBean(OtherBean otherBean){
SomeBean someBean = new SomeBean();
someBean.setOtherBean(otherBean);
return someBean;
}
8.ContextConfiguration(classes={配置类1.class,配置类2.class}):使用配置类的形式启动测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyConfig.class)
JavaConfig 方式配置 DI
在进行DI注入前,必须保证这个对象已经交给spring进行管理,spring框架会从容器中找这个对象,
获取的都是同一个对象,默认使用的是单例
方式一
在方法的形参注入
@Bean //Spring框架会从容器中找otherBean
public SomeBean someBean(OtherBean otherBean){
SomeBean someBean = new SomeBean();
someBean.setOtherBean(otherBean);
return someBean;
}
方式二
使用方法注入
@Bean //在容器中拿这个bean,拿到的是同一个对象
public SomeBean someBean2(){
SomeBean someBean = new SomeBean();
someBean.setOtherBean(otherBean());
return someBean;
}
配置文件的参数配置
**作用,**可以很方便的修改配置
例如:端口号,session超时时间等
使用的配置文件格式有:application.xml, application.yaml
yml文件配置(建议)
该配置文件简化了xml,结构层次更加明显,一定要遵循配置的格式,分号后面使用空格进行隔离
配置文件的优先级
高级会覆盖低级,一般将配置文件放在外面,方便测试人员进行更改调试
- 项目/config/application.properties
- 项目/application.properties
- classpath:config/application.properties
- classpath:application.properties
参数属性绑定
//绑定方式一:在配置类上绑定属性
public class JavaConfig {
// @Value:从 Spring 环境对象中根据 key 读取 value
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public MyDataSource dataSource() {
MyDataSource dataSource = new MyDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
//绑定方式二:在自定义的类上进行绑定
public class MyDataSource {
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
}
SpringBoot 自动装配
@SpringBootApplication注解做了些什么
@EnableAutoConfiguration:开启自动装配的注解