- 为什么要使用springboot
因为spring,springmvc需要使用大量的配置文件(xml文件)
还需要配置各种对象,把使用的对象放到spring容器中才能使用对象
需要了解其他框架配置规则
- springboot就详单与不需要配置文件的spring+springmvc,常用的框架和三方库都已经配置好的,可以拿来就使用
- springboot开发效率搞,使用方便
JavaConfig:使用java类作为xml配置文件的替代,是配置spring容器的春java的方式,在这个java类可以创建java对象,把对象放入spring容器中(注入到容器)
使用两个注解:
- @Configuration:放在类的上面,表示这个类是最为配置文件使用的(xml)
- @Bean:声明对象,把对象注入到容器中
@Configuration
public class SpringConfig {
@Bean
public Student createStudent() {
Student s1 = new Student();
s1.setName("zhangsan");
s1.setAge(22);
s1.setSex("男");
return s1;
}
}
1.2@ImportResource
@ImportResource 导入其他的xml配置文件
@Configuration
@ImportResource(value = "classpath:applicationContext.xml")
public class SpringConfig {
@Bean
public Student createStudent() {
Student s1 = new Student();
s1.setName("zhangsan");
s1.setAge(22);
s1.setSex("男");
return s1;
}
1.3@PropertyResource
@PropertyResource:读取properties属性配置文件,使用属性配置文件可以实现外部化配置,在程序代码之外提供数据。
步骤:
- 在resource目录下,创建properties文件,使用的是k=v的格式提供数据
- 在PropertyPesource指定properties文件的位置
- 使用@Value(value=${key})
@Configuration
@ImportResource(value = "classpath:applicationContext.xml")
@PropertySource(value = "classpath:config.properties",encoding = "UTF-8")
@ComponentScan(basePackages = "com.ywr.vo")
public class SpringConfig {
}
第二章 SpringBoot
2.1介绍
springboot是spring中的一个成员,可以简化spring,springmvc的使用,他的核心还是IOC容器
特点:
- 创建spring应用
- 内嵌的tomcat,jetty,Undertow
- 提供了starter起步依赖,简化应用的配置
比如使用Mybatis框架,需要在spring项目中,配置Mybatis的对象SqlSessionFactory,Dao的代理对象在springboot项目中,在pom,xml里面加入一个mybaits-springboot-starter依赖
- 尽可能去配置spring和第三方库(就是把spring中的第三方库中的对象都创建好,放到容器中,开发人员可以直接使用)
- 提供了健康检查,统计,外部化配置
- 不用去生成代码,不用使用xml,做配置
使用的地址是:http://start.spring.io
resource- static:静态资源(js.css.图片)
- templates:模板文件
- application.properties:springboot重要的配置文件
@SpringBootApplication 符合注解:由 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 组合@SpringBootConfiguration:
@Configuration
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
说明:使用了@SpringBootConfiguration注解标签的类,可以作为配置文件使用的,可以使用Bean声明对象注入容器
@EnableAutoConfiguration启动自动配置,把java对象配置好,注入到spring容器中,例如可以把mybatis的对象创建好,放到容器中
@ComponentScan@ComponentScan 扫描器,找到注解,根据注解的功能创建对象,给属性赋值等等
默认扫描的包:@ComponentScan 所在的类所在的包和子包
2.3springboot配置文件配置文件名称:application
扩展名有:properties(k=v);yml(k: v)
使用application.properties,application.yml
application.properties#设置端口号 server.port=8082 #设置访问应用上下文路径 contextpath server.servlet.context-path=/mybootapplication.yml
server:
port: 8083
servlet:
context-path: /mybootyml
2.4多环境配置
开发环境,测试环境,上线环境。
每个环境有不同的配置信息,列如端口,上下文件,数据库url,用户名,密码等等
使用多环境配置文件,可以方便切换不同的配置。
使用方式:创建多个配置文件,名称规则:application-环境名称.properties(yml)
创建开发环境的配置文件:application-dev.properties(application-dev.yml)
创建测试者使用的配置:application-test.properties(application-test.yml)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mH7qLEW8-1651245092038)(C:UsersywrdsgAppDataRoamingTyporatypora-user-imagesimage-20220429144816251.png)]
application.yml#激活使用多个配置文件
#使用dev环境
#spring:
# profiles:
# active: dev
#使用test环境
spring:
profiles:
active: test
application-dev.yml
#开发环境的配置文件
server:
port: 8081
servlet:
context-path: /mydev
application-online.yml
#项目上线使用的配置文件
server:
port: 9002
servlet:
context-path: /myonline
application-test.yml
#测试使用的配置文件
server:
port: 9001
servlet:
context-path: /mytest
*注意
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fntRmzLm-1651245092040)(C:UsersywrdsgAppDataRoamingTyporatypora-user-imagesimage-20220429151649187.png)]
这种表示端口号被占用了
2.5自定义配置 @Value#配置端口号,context-path
server:
port: 8082
servlet:
context-path: /myboot
#自定义key=value
school:
name: 姚文睿
website: www.ywrdsg.com
address: 安徽安庆宜秀区
site: www.baidu.com
@Controller
public class HelloController {
@Value("${server.port}")
private Integer port;
@Value("${server.servlet.context-path}")
private String contextPath;
@Value("${school.name}")
private String name;
@Value("${site}")
private String site;
@RequestMapping("/data")
@ResponseBody
public String queryData() {
return name + ",site" + site + ", 项目的访问地址" + contextPath + ", 使用的端口号是" + port;
}
}
关于@Component
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlyIOa42-1651245092042)(C:UsersywrdsgAppDataRoamingTyporatypora-user-imagesimage-20220429152612813.png)]
@ConfigurationProperties
org.springframework.boot
spring-boot-configuration-processor
true
#自定义key=value school: name: 姚文睿 website: www.ywrdsg.com address: 安徽安庆宜秀区
@ConfigurationProperties(prefix = "school")
@Component
public class SchoolInfo {
private String name;
private String website;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "SchoolInfo{" +
"name='" + name + ''' +
", website='" + website + ''' +
", address='" + address + ''' +
'}';
}
}
@Controller
public class HelloController {
@Resource
private SchoolInfo info;
@RequestMapping("/info")
@ResponseBody
public String queryInfo() {
return "SchoolInfo对象:" + info.toString();
}
}
@ConfigurationProperties 的基本用法非常简单:我们为每个要捕获的外部属性提供一个带有字段的类。请注意以下几点:
- 前缀定义了哪些外部属性将绑定到类的字段上
- 根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配
- 我们可以简单地用一个值初始化一个字段来定义一个默认值
- 类本身可以是包私有的
- 类的字段必须有公共 setter 方法
springboot不推荐使用jsp,而是使用模板技术代替jsp
使用jsp需要配置:
-
加入一个处理jsp的依赖,负责编译jsp文件
org.apache.tomcat.embed tomcat-embed-jasper -
如果需要使用servlet,jsp,jstl功能,需要加相应的依赖
javax.servlet jstl javax.servlet javax.servlet-api javax.servlet.jsp javax.servlet.jsp-api 2.3.3 -
创建一个存放jsp的目录,一般叫做webapp
index.jsp
-
需要在pom.xml指定jsp文件编译后的存放目录
META-INF/resource
-
创建Controller,访问jsp
-
在application.properties文件配置视图解析器
看这个项目
2.7使用容器你想通过代码从容器中获取对象。
通过SpringApplication.run(Application.class, args);的返回值获取容器
public static ConfigurableApplicationContext run(Class> primarySource, String... args){
return run(new Class[]{primarySource}, args);
}
ConfigurableApplicationContext:接口,是ApplicationContext的子接口
public interface ConfigurableApplicationContext extends ApplicationContext
public static void main(String[] args) {
//获取容器对象
ApplicationContext ctx = SpringApplication.run(Application.class, args);
//从容器中获取对象
UserService userService = (UserService) ctx.getBean("userService");
userService.sayHello("赵紫薇");
}
2.8CommandLineRunner 接口 和 ApplicationRunner 接口
这两个接口都有一个润方法,执行时间在容器对象创建好后,自动执行run()方法,可以完成自定义的在容器对象创建好的一些操作。
@FunctionalInterface
public interface CommandLineRunner {
void run(String... args) throws Exception;
}
@FunctionalInterface
public interface ApplicationRunner {
void run(ApplicationArguments args) throws Exception;
}



