Springboot知识点简单概括
1.springboot的基本概述
1.1. 什么是springboot?
springboot是对spring的进一步封装。
1.2. 什么是微服务?
微服务是一种架构风格,他提倡将一个应用划分成独立的小型服务,每个小型服务都有自己独立的进程,在不同的服务器上运行,每个服务互相独立,服务与服务之间通过HTTP的方式进行通信.
1.3. springboot的优点?
(1)没有xml配置文件,自动配置,简化开发
(2)内置Tomcat容器,简化部署
(3)自动进行依赖的版本控制,避免版本冲突
2.如何编写一个springboot程序
2.1. 引入依赖 parent web
<!--spring-boot-starter-parent整合第三方常用框架的依赖信息-->
<!-- 添加父级依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!--spring-boot-starter-web是springboot整合springmvc是Maven的依赖继承关系-->
<!--web启动器-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.2. 定义配置文件
全局配置文件,唯一文件名: application.yml /application.properties
server:
port: 8808
path: /user
2.3. 编写启动类
@SpringBootApplication
public class App{
public static void main(String[] args){
SpringApplication.run(App.class,args);
}
}
3. 注意以下细节?
3.1. @SpringBootApplication注解的作用
springboot自动配置原理核心@SpringBootApplication
链接:springboot如何实现自动配置
3.2. 为什么要定义parent依赖??
父级依赖,里面定义了大量的第三方的依赖,方便进行自动配置
3.3. 为什么定义web依赖?
实现对springMVC进行自动配置。
4.掌握.yml配置文件的语法
4.1. yml语法格式?
k: v 属性和属性之间要有换行并缩进
4.2. 不同数据在yml文件里面的定义格式?
字面量,list(set 数组) ;对象;map
server:
port: 8808
path: /user
#对象
user:
name: zhangsan
age: 18
#行内写法s
user2: {name: zhangsan,age: 18}
#数组(list set)
list:
- user1
- user2
- user3
#行内写法
list2: [user1,user2,user3]
emp:
empName: tom
sex: 男
age: 18
email: 2571824356@qq.com
#配置文件的占位符
#随机数
#${random.uuid}
#${random.int(18,60)}
#${random.value}
randomdemo: #不能使用驼峰命名,避免启动报错
id: ${random.uuid} #取随机的uuid
age: ${random.int(0,100)} #取指定范围的随机数
address: ${random.value} #获取随机字符串
name: ${:张三} #默认值 如果不写 默认值就是张三
4.3. 如何将配置的yml文件中的属性绑定到bean中?
传统的方式: 在spring里面我们可以使用
(1) set方法,
(2)带参数的构造函数
(3) p名称空间
(4)SpringEL表达式
(5)注解(@Value @Resource @Autowired)
spirngboot里面:
(1)@Value
(2)@ConfigurationProperties(prefix=“xxxx”)
@Component
@ConfigurationProperties(prefix="student") //对应yml配置文件的属性名
public class Student{
//属性
// Get Set方法
}
等等…
5.核心注解?
5.1. @ConfigurationProperties(prefix=“属性名”)
详细分析可参照:链接:springboot的配置
5.2. @PropertySource(value = {“classpath:xxxx.properties”})
导入局部的配置文件.properties
5.3. @ImportResource
识别XML配置文件( 这个注解是用在启动类上)
目的:使用XML的方式管理bean
5.4. springboot默认不识别xml,所以我们使用java配置类的方式来管理bean
/*@Configuration
public class 类{
@Bean
public 被管理的bean的类型 bean的名称(){
return new 被管理的bean的类型();
}
}*/
@Configuration
public class Test{
@Bean
public User user(){
return new User();
}
}
6.springboot整合第三方技术
6.1 整合日志 AOP
6.1.1整合日志
下面只介绍简单步骤,具体内容参照:
链接:springboot与日志
(1)引入log4j依赖
<!-- springboot-log4j -->
<!-- 引入log4j日志依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
(2)加入日志启动类
(3)导入 日志配置文件 log4j.properties
推荐使用lombok插件
(1)导入lombok的依赖
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
(2)下载lombok插件
6.1.2.整合AOP
(1)加入AOP依赖 AspectJ的依赖
(2)定义目标类
(3)定义切面类
@Aspect
@Component
public class MyAspect{
//前置增强
@Before(value-"execution(public * com.yousian.controller.UserController.addUser(..))")
public void before(){...}
}
6.2 整合thymeleaf模板引擎
整合的步骤:
(1)引入thymeleaf的启动器
<!--引入thymeleaf依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
(2)在HTML页面引入thymeleaf的命名空间
<!DOCTYPE html>
<!--引入thymeleaf的命名空间-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
6.3 整合springmvc,扩展SpringMVC的功能?
在默认的情况下,springboot只是做了springmvc最基本功能的自动配置。如果我们想要使用更多springmvc的功能,我们需要进行扩展.
//如何扩展springmvc的功能?
//配置自定义视图映射
//全面扩展mvc配置
public class MyWebMVC implements WebMvcConfigure{
//自定义视图
//注册拦截器
//类型转换器
}
6.3.1 springboot默认静态资源的映射规则?
Springboot默认映射resourse目录下的public,static,resourse,templates
6.3.2 如何定义拦截器并注册拦截器?
(1) 自定义拦截器
//实现HandlerInterceptor接口
public class MyInterceptor implements HandlerInterceptor{
//前置拦截
//后置拦截
//最终拦截
}
(2) 在MyWebMVC类里面实现注册拦截器的方法
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加拦截器
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/index.html", "/", "/user/login", "/css/**", "/js/**", "/img/**");
}
6.3.3 如何自定义视图?
在MyWebMVC中自定义默认静态资源的映射规则
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index.html").setViewName("index");
registry.addViewController("/index").setViewName("index");
registry.addViewController("/dashboard.html").setViewName("dashboard");
}
6.3.4 如何进行异常处理?
(1).默认处理规则。
如果后台资源出来了异常,在默认的情况下,会去templates目录寻找error.html的资源
更细致的处理方式:在templates目录下面创建error目录,在error目录里面,以异常代码命名文件 404.html 500.html
(2).@ExceptionHandler注解处理(只能处理当前的controller类里面的异常),在controller类里面进行处理
// 处理算术异常
@ExceptionHandler(value = {java.lang.ArithmeticException.class})
public ModelAndView handleArithmeticException(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("error",e.toString());//向页面展示错误信息
mv.setViewName("error1");
return mv;
}
(3).全局处理异常@ControllerAdvice + @ExceptionHandler处理
//定义一个异常处理类
@ControllerAdvice //标识当前类是一个全局异常处理类
public class GlobalException {
// 处理算术异常
@ExceptionHandler(value = {java.lang.ArithmeticException.class})
public ModelAndView handleArithmeticException(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("error",e.toString());//向页面展示错误信息
mv.setViewName("error1");
return mv;
}
}
(4).使用SimpleMappingExceptionResolver来处理(不能显示异常的具体信息)
首先需要将SimpleMappingExceptionResolver类注入到spring容器;
@Configuration
public class GlobalExceptionHandler {
@Bean
public SimpleMappingExceptionResolver getExceptionResolver(){
SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
/**
* 参数1:处理的具体的异常的类型
* 参数2:处理异常需要跳转到的视图
*/
properties.put("java.lang.NullPointerException","error3");
properties.put("java.lang.ArithmeticException","error3");
properties.put("java.lang.ArrayIndexOutOfBoundsException","error3");
resolver.setExceptionMappings(properties);
return resolver;
}
}
(5).HandlerExceptionResolver 来进行全局异常处理
定义一个类,实现HandlerExceptionResolver 接口即可
public class MyExceptionReslover implements HandlerExceptionResolver {
/**
* 处理异常的方法
*/
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
Object o, Exception ex) {
ModelAndView mv = new ModelAndView();
// 判断不同异常类型,做不同视图跳转
if (ex instanceof ArithmeticException) {
mv.setViewName("error4");
}
if (ex instanceof NullPointerException) {
mv.setViewName("error5");
}
mv.addObject("error", ex.toString());
return mv;
}
}
6.4 springboot整合mybatis
(1) 引入mybatis的启动器
(2) 编写配置文件(数据源的类型 用户名 密码 url 驱动类 别名)
(3) 定义接口及实现
(4) 定义service
(5) 定义controller