sprint boot学习笔记

本文详细介绍了SpringBoot的核心特性,如自动配置、注解使用,以及如何通过`@ConfigurationProperties`进行外部配置。此外,还探讨了微服务的概念,强调了其在构建模块化系统中的重要性。文章还提到了SpringBoot的启动流程,解释了`SpringApplication.run()`方法的作用,并给出了一个自定义异常处理的示例。最后,简述了SpringBoot集成JWT进行权限验证的优势与不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sprint boot学习笔记

不成文的共识:对于业务类使用注解,例如对于MVC的开发,
控制器使用@Controller
业务层使用@Service,
持久层使用@Repository
而对于一些公用的Bean,例如对于数据库(Redis)、第三方资源等使用XML配置

sprint boot的一些注解

@RequestMapping(“/test”)
是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

@GetMapping(“/test”)
是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写, @PostMapping同理

@Controller
表示该类代表控制器类(控制层/表现层), 这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层),@Service标识的类中的方法可以继续调用@Resposity标识的接口实现类(Dao层/持久层)。

@ResponseBody
将java对象转为json格式的数据,注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据
在这里插入图片描述

@RestController
是@ResponseBody和@Controller的组合注解

@Component(“bean_id”)
相当于配置文件中的 ,括号内也可不写,默认驼峰命名,当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类

@PropertySource(“classpath:/cookie.properties”)
用于引入外部属性配置(resources下的cookie.properties)其中ignoreResourceNotFound 表示没有找到文件是否会报错,默认为false,就是会报错,一般开发情况应该使用默认值

@ConfigurationProperties(prefix = “cookie.tb”)
获取前缀为cookie.tb这些属性
对于 Spring Boot,创建一个 CookieProperties 类型的 bean,我们可以通过下面几种方式将其添加到应用上下文中,首先,我们可以通过添加 @Component 注解让 Component Scan 扫描到,
当我们为属性配置错误的值时,而又不希望 Spring Boot 应用启动失败,我们可以设置ignoreInvalidFields 属性为 true (默认为 false),样,Spring Boot 将会设置默认值

在这里插入图片描述

@Configuration
用于定义配置类,@Bean标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的

@NoArgsConstructor和@AllArgsConstructor
用于为类自动生成无参数构造函数和所有参数构造函数,简化代码编写

@ControllerAdvice
这是一个Spring MVC的注解,用于对Controller层全局异常处理和全局数据绑定进行统一管理。使用@ControllerAdvice注解的类可以被看作是对多个Controller类的通知(Advice),可以定义全局的异常处理器和数据绑定规则

springboot

核心原理:自动装配
核心思想:约定大于配置
约定的配置就是默认的配置,有了约定的配置,于是springBoot就说,大家开发新功能的时候,不要一上来就去自己动手配置,先看看我们约定的配置满不满足需求。如果不满足,你再去配置适合自己业务场景。但大部分你就按照约定的来,就可以了
在这里插入图片描述

回顾spring

容器Spring是为 了解决企业级应用开发的复杂性而创建的,简化开发

Spring是如何简化Java开发的
为了降低Java开发的复杂性,Spring采用了 以下4种关键策略:
1、基于POJO的轻量级和最小侵入性编程;
2、通过I0C,依赖注入(DI) 和面向接口实现松耦合;
3、基于切面(AOP)和惯例进行声明式编程;
4、通过切面和模版减少样式代码;

如何学习新东西,如何持续学习,如何关注这个行业

微服务了解

它要求我们在开发一个应用的时候,这个应用必须构建成一系列小模块的组合;可以通过http的方式进行互通
微服务架构就是将应用按功能来分为许多小块

一个大型系统的微服务架构,就像一个复杂交织的神经网络,每-个神经元就是-一个功能元素,他们各自完成自己的功能,然后通过http相互请求调用。比如一个电商系统,查缓存、连数据库、浏览。如果修改其中的一个功能,只需要更新升级其中一个功能服务单元即可。

●构建一个个功能独立的微服务应用单元,可以使用springboot, 可以帮我们快速构建一个 应用;
●大型分布式网络服务的调用,这部分由spring cloud来完成,实现分布式;
●在分布式中间,进行流式数据计算、批处理,我们有spring cloud data flow。
●spring 为我们想清楚了整个从开始构建应用到大型分布式应用全流程方案。

新建第一个springboot程序

在这里插入图片描述
Artifact:项目名字
packages:尽量与Group一样
在这里插入图片描述
删掉多余的文件
在这里插入图片描述

打包成jar文件

双击点击package
在这里插入图片描述

在这里插入图片描述
在生成的jar文件目录打开cmd

java -jar 名称.jar

自定义启动标志
在resources下新建banner.txt
banner.txt


//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机     永无BUG                    //
                

启动类


在这里插入图片描述
结论:springboot所有的自动配置都在启动类中被扫描并加载:spring.factories所有的自动配置类都在这里面,但不一定生效
要判断条件是否成立,只要导入了对应的start,或pom文件映入就有对应的启动器了,有了启动器,自动装配就会生效,然后就配置成功

1.springboot在启动的时候,从类路径下/META-INF/ spring. factories获取指定的值;
2.将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置
3.以前我们需要自动配置的东西,现在springboot帮我们做了!
4.自动配置的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包下
5.它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
6.容器中也会存在非常多的xxAutoConfiguration的文件(@Bean), 就是这些类给容器中导入了这个场景需要的所有组件;并自动配置,@Configuration,JavaConfig!
7.有了自动配置类,兔去了我们手动编写配置文件的工作

SpringApplication.run(MyApplication.class, args);
不仅仅启动方法,更是启动了服务,以进程方式启动
SpringApplication主要做了四件事情
1.推断应用的类型是普通的项目还是Web项目
2.查找并加载所有可用初始化器,设 置到initializers属性中
3.找出所有的应用程序监听器,设置到listeners属性中
4.推断并设置main方法的定义类,找到运行的主类

关于SpringBoot,谈谈你的理解:

“约定大于配置”
1.自动装配
2.run() {有一些全局存在的监听器,它会去获取上下文bean}

关于spring boot模糊查询
mapper错误sql语句:

@Select("select * from om_hour where data_time like '#{t_hours}%'")
    @Results({
            @Result(column = "company_id",property = "mn")
    })
    List<OmHour> OM_hour_select(@Param("t_hours") String t_hours );

错误提示:
Caused by: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0)

解决方法:
将%加在控制层的参数里
mapper文件

 @Select("select * from om_hour where data_time like #{t_hours}")

controller文件:

 List<OmHour> water_data=sfes_yueyangMapper.OM_hour_select(t_hours+"%");

关于java的自定义异常

Java的自定义异常指的是程序员在开发过程中需要自定义的一些异常类,用于处理程序出现不可预知的异常情况。通过自定义异常可以更加灵活地抛出和捕获异常,并且可以为异常提供更加清晰的错误信息,方便程序员进行调试。常见的自定义异常有继承RuntimeException或Exception两种方式实现
实例:


import lombok.Getter;

@Getter
public class ServiceException extends RuntimeException{
    private String code;

    public ServiceException(String code,String msg){
        super(msg);
        this.code=code;
    }
}

springboot集成JWT权限验证

JWT:json web token 它将用户信息加密到token里,服务区通过使用保存的密钥验证token的正确性,正确及通过验证
优点:
1.简洁,数据量小,速度快
2.token包含了用户信息,避免了多次查询数据库
3.不需要在服务端保存会话信息,适合分布式微服务
缺点:
1.对数据过期不好处理
2.无法作废,不太安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

事情判断忘记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值