学习
2021/11/27
1、这阶段应该如何学习
视图层做不好
springboot内嵌tomcat
war:tomcat运行
springcloud
springboot:认识它
配置如何编写 yaml 格式
为什么自动装配原理 重要(面试)
集成web开发 业务核心
集成数据库 Druid
分布式开发:Dubbo+zookeeper rpc调用
swagger:接口文档
任务调度:异步任务
安全
linux 部署
springcloud
真正微服务
restful风格
负载均衡 Ngix
基础不好 似懂非懂
简化 背后经过了很多的集成
2、什么是springboot 16
spring是一个容器 简化开发
通过切面和模板减少样式代码
javaweb servlet tomcat
了解理论 而不是单单会做一个东西
持续学习能力 架构
集成了大量的第三方库配置
3、什么是微服务架构
架构风格
服务拆分 组装
用户下单 :controller
第一遍目标:看懂怎么操作,后面再去补充
消息队列
马丁的论文
https://www.jianshu.com/p/8c3d8b067f26
apigateway网关
熔断机制
软实力
4、第一个springboot程序
跟着做
11/28下午一点半
5、自动装配原理 40
pom.xml
- 核心依赖在父工程中
- 不需要指定版本,因为有仓库
启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
springboot的启动场景,比如说springboot-starter-web,会自动导入web环境所有的依赖。
会将所有的场景变成启动器
要使用什么功能,需要找到对应的启动器。
主程序
@SpringBootApplication
public class HelloSundayApplication {
public static void main(String[] args) {
SpringApplication.run(HelloSundayApplication.class, args);
}
}
三个部分
- 注解
@SpringBootConfiguration springboot的配置
@Configuration:spring配置类
@Component:是一个spring组件
@EnableAutoConfiguration
@AutoConfigurationPackage 自动配置包
@Import({AutoConfigurationImportSelector.class}) 导入选择器
断言 不为空
自动配置核心文件
准备放弃 自己找东西看 关于springboot自动装配原理
文件很重要
所有的资源加载到配置类中
Condition 条件判断
自动配置原理分析
画流程图
componentScan:扫描当前主启动类同级的包
autoConfigurationPackage 自动注册包
导入类 是核心 自动导入选择器
选择了什么 选择import
getAutoConfigutationEntry() 获取自动配置实体
getCandidateConfigurations():获取候补配置
标注了
项目资源
系统资源
从这些资源中便利了所有的newxElement(自动配置)
1、在启动时,从类路径下/Meta-inf/spring.factories获取指定的值。
2、将自动配置类导入配置,就会生效
3、当我们进行自动配置,以前需要自动配置的东西,springboot帮我们做了。
4、所有 方觉方案和自动配置的东西都在spring-boot-autoconfigure.jar下
5、把所有需要导入的组件,以类名形式返回,这些组件就会被添加到容器。
6、自动配置,@Configuration,JavaConfig
7、免去手动编写配置类。
7、启动类怎么运行 12
开启了一个服务
1、判断是不是web项目
2、
没做过项目听了也没用
8、yaml语法 11
springboot配置文件中可以配置哪些东西
application.yalm
配置文件名称是固定的
server:
port: 8081
可以修改springboot自动配置默认值
是一种格式,可以
普通的kv
name: qingjiang
对象
student:
name: shen
age: 3
行内写法
student: {name: shen,age: 3}
#数组
pets:
- cat
- dog
- pig
或者 pets: [cat,dog,pid]
有层级关系 空格要求很高
可以注入到配置类中
9、给属性赋值的几种方式 22
10、JSR303校验 12
11、多环境配置及配置文件位置
12、自动装配原理再理解 24
13、web开发探究 5
14、静态资源导入探究 18
15、首页和图标定制 19
16、themeleaf引擎 13
18、MVC配置原理 15
19、扩展MVC 15
20、员工管理系统:准备工作 21
bootstrap模板
导入html文件
模拟创建数据库
在EmployeeDao表中要用到DepartmentDao表
给两个表都添加一个@Repository 表示被Spring托管
@Autowired 自动注入
private DepartmentDao departmentDao;
日期 自定义有参构造
this.birth=new Date();
//主键自增
private static Integer initId=1006;
//增加一个员工
public void save(Employee employee){
if(employee.getId()==null){
employee.setId(initId++);
}
}
21、员工管理系统:首页实现 10
#关闭默认图标
spring.mvc.favicon.enabled=false
去掉thymeleaf缓存
spring.thymeleaf.cache=false;
清理上网痕迹
静态资源加载完成
th:src="@{/img/bootstrap-solid.svg}"
导入命名空间
<html lang="en" xlmns:th="http:www.thymeleaf.org">
前端不熟
<link th:href="@{/css/dashboard.css}" rel="stylesheet">
server.servlet.context-path=/kuang
22、员工管理系统:国际化 31
23、登录功能实现 12
${#strings.isEmpty(name)}
<p style="color:red" th:text=${msg} th:if="$not #strings.isEmpty()"></p>
在MyMvcConfig中添加映射
registry.addViewControllrt(urlPath:"/main.html").setViewName("dashboard");
登录控制器
public class LoginController {
@RequestMapping("/user/login")
@RequestBody
public String login(@RequestParam("username") String username, @RequestParam("password") String password, Model model,
HttpSession session){
//具体业务
if(!StringUtils.isEmpty(username)&&"123456".equals((password))){
session.setAttribute("loginUser",username);
return "redirect:/main.html";
}else{
model.addAttribute("msg","用户名或密码错误");
return "index";
}
}
}
24、登录拦截器8
解决一下:不论登不登陆都可以进入main页面的问题
LoginHandlerInterceptor类
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//登录成功后,应该有用户session
Object loginUser = request.getSession().getAttribute("loginUser");
if(loginUser==null){
request.setAttribute("msg","没有权限,先登录");
request.getRequestDispatcher("/index.html").forward(request,response);
return false;
}else {
return true;
}
}
}
MyMvcConfig类添加
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("index.html").setViewName("index");
registry.addViewController("/main.html").setViewName("dashboard");
}
//自定义国际化组件生效
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/index.html","/","/user/login");
}
}
在dashboard中修改,可以在登录页获取到用户名信息
[[${session.loginUser}]]
多实践几遍
25、展示员工列表 27
员工管理 修改超链接
26、增加员工实现 20
27、修改员工信息 15
28、删除及404处理
29、如何写网站
30、回顾
31、整合jdbc使用
32、整合DRuid数据源
不能没有压力吧 peerpresure是我的动力
公司 11/28 晚 22:26
33、整合Mybatis框架 26
34、SpringSecurity搭建 16
35、用户认证授权 22
36、注销以及权限控制
37、记住我以及首页定制 14
38、shiro快速开始 16
39、shiro的object实现
40、Springboot整合shiro环境搭建 19
41、Shiro实现登录拦截 7
42、Shiro实现用户认证 11
43、Shiro整合Mybatis 16
44、Shiro请求授权实现 16
47、Swagger介绍及集成 33
48、配置Swagger信息 10
51、异步任务 10
54、Springboot整合redis
55、自定义redisTemplate 20
60、服务注册发现实战 36
整合代码