SpringBoot学习

一、基础入门

1.1、快速入门

(1)第一步:创建一个maven工程"不需要创建web工程"
(2)第二步:导坐标
 	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    "导入这两个坐标后,会自动将导进去很多需要用的jar包"
(3)第三步:写一个启动类
"注意:一个项目需要一个启动类必须要与其他要
扫描的包在同一级别上。因为spring-boot会自动加载启动类
所在包下及其子包下的所有组件."
因为spring-boot会自动加载启动类所在包下及其子包下的所有组件.
	@SpringBootApplication"该注解就是用来标注该类是启动类"
	public class Application {
	    public static void main(String[] args) {
	    "//注意这个里面的参数:一个是当前类类型,一个是主函数的args"
	        SpringApplication.run(Application.class,args);
	    }
	}

(4)第四步:写一个controller类
	@RestController // @Controller + @ResponseBody
	@RequestMapping("/hello")
	public class HelloController {
	
	    @RequestMapping("/word")
	    public String sayHi() {
	        return "hello word";
	    }
	}
	"@RestController注解解释:该注解相当于@Controller 
	+ @ResponseBody,如果将@ResponseBody注解写在类上,
	相当于给该类里面的每一个方法都加上了该注解。因此方法在
	返回字符串时不是进行页面跳转,	而是将返回的字符串在页面
	打印输出。(在spring MVC里面学过)"
(5)第五步:开始运行
	首先,先运行启动类。等待启动类运行成功后,再在浏览器
	里面输入相应的映射地址,
	比如该例:"localhost:80808/hello/word"

1.2、运行时遇到一个小问题

  • 出现Whitelabel Error Page问题
  • 原因:没有将启动类与要扫描的类放到同一级别上。
  • 解决方案:在上述第三步里面有详细说明。

1.3、生成jar包,并在cmd中运行jar包(项目部署)

1.3、依赖管理

  • 父项目做依赖管理
	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
    </parent>
    
	  <parent>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-dependencies</artifactId>
	    <version>2.3.5.RELEASE</version>
	  </parent>
  • 开发导入starter场景启动器
(1)springboot提供了不同业务环境的启动器。"具体可以去官方文档查看"
(2)可以自定义启动器"具体请看官方文档"

  • 无需关注版本号,自动版本仲裁
  • 可以修改版本号
如果springboot底层引入的版本和你当前使用的不一致,则可以通过在pox文件里更改。
例如数据版本不同:如下所示
	<properties>
    	修改版本号:注意这个标签名称,需要和底层依赖保持一致
        <mysql.version>8.0.22</mysql.version>
    </properties>

1.4、自动配置

  • 自动配置tomcat
  • 自动配好springMVC
(1)引入了springMVC的全套组件
(2)自动配置好sprigMVC常用组件
  • 自动配好web常见功能:如:字符编码
springboot帮我们配置好了所有web常见开发场景
  • 默认的包结构
(1)主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来。
(2)想要改变包扫描路径,只需在主程序的@SpringBootApplication(scanBasePackages="")里面设置就行。

  • 各种配置的默认值
(1)默认配置最终都是映射到MultipartProperties.
(2)配置文件的值最终都会绑定到每个类上,这个类会在容器中创建对象
  • 按需加载所有自动配置项

二、底层注解

2.1、@Configuration注解

  • 作用位置:类上
  • 作用:告诉springBoot,该类是一个配置类,就相当于该类是一个配置文件。
  • 该注解有一个属性:proxyBeanMethod,默认值是true。
为true时:简单理解,就是说该类的代理对象在执行下面方法时,
          首先判断容器里面是否存在该组件(该方法的返回值对象),如果不存在则创建,
          如果存在则直接返回。
为false时:简单理解,就是说在代理对象执行下面方法时,不会判断容器里是否存在该组件,
          下面的的方法每一次执行都会产生一个新的对象。

2.1.1、给容器里注入组件的其他方式

  • 除了使用@Bean注解之外,话可以使用以下注解。
  • @Component、@Controller、@Service、@Repository
  • @Import

2.2、@Import注解

  • 作用位置:类上
  • 用于导入一个组件,可以写在容器中任意一个组件上。
  • 里面有一个数组类型的属性,只需将要组件的的类类型写进去就行。可以导入自己写的组件,也可以导入jar包的。

2.3、@Conditional注解(条件配置)

  • 作用位置:方法、类
  • 作用:一般使用的是该注解的派生注解,所以需要看其派生注解的具体作用
    在这里插入图片描述
"如果标注在类上,则该类里面所有的方法都起作用"该注解的所有派生注解都是这样。

(1)@ConditionalOnBean("bean名称"):当容器里有该bean时,被该注解标注的方法才会执行。
(2)@ConditionalOnBean("bean名称"):当容器里面没有该bean时,方法才会执行。

2.4、@ImportResource()注解

  • 作用位置:类上
  • 作用:如果我们有一个 xml 配置文件,需要将里面的组件注册进来,就需要使用 @ImportResource 注解。

三、最佳实践

3.1、lombok简化开发

配置步骤

  • 第一步:导入坐标
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
  • 第二步:安装插件
    在插件中搜索lombok,安装即可。
  • 第三步:重启idea
  • 第四步:配置
"通过添加这些注解,从而少写这些方法,让代码看起来更加简介"
	@Data//get/set
	@AllArgsConstructor//全参构造器
	@NoArgsConstructor//无参构造器
	@ToString//toString
	@EqualsAndHashCode//hash和equals方法
	@Slf4j//配置日志
	@Component
	@ConfigurationProperties(prefix="mycar")
	public class Car {
	    private String name;
	    private double money;
	    
	}

3.2、devtools-自动重启项目

配置步骤

  • 第一步:导入坐标
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
  • 第二步:当代码发生改变或者静态页面发生改变后不想通过重启按钮来启动。那就按下Ctrl+F9,进行重启。我的电脑好像不起作用,回头得找一下原因。

3.3、使用初始化向导创建项目-Springinitailizr

在这里插入图片描述

四、配置文件

4.1、使用properties配置文件

  • 就是之前学习的properties文件,这里就不在多做解释。

4.2、yaml

  • yaml基本语法
(1)key: value;kv之间要有空格;
(2)大小写敏感
(3)使用缩进表示层级关系;
(4)缩进不允许使用table,只允许空格,"但是idea好像可以允许,但是最好使用空格"
(5)缩进空格数不重要,只要相同层的元素左对齐就行。
(6)#代表注释。
(7)单引号/双引号表示的字符串内容会被转义/不专义;
  • 数据类型
(1)字面量:单个的、不可再分的值。eg:达特、boolean、string、number、null...
	K: v
(2)对象:键值对集合。map、hash、set、object、
	行内写法:k: {k1:v1,k2:v2,k3:v3}
	k: 
	  k1: v1
	  k2: v2
	  k3: v3
(3)数组:array、list、queue
	行内写法:k: [v1,v2,v3]
	k: 
	  - v1
	  - v2
	  - v3

例子:
	@Date
	@ToString
	@Component
	@ConfigurationProperties(prefix="person")
	public classs Person{
		private String username;
		private Boolean boss;
		private Date date;
		private Integer age;
		private Pet pet;
		private String[] interests;
		private List<String> animal;
		private Map<String,Object> score;
		private Set<Double> salarys;
		private Map<String, List<Pet>> allPets;
	}
	person:
	  username: zhangsan
	  boss: true
	  date: 2012/2/12
	  age: 12
	  pet: 
	    name: 阿花
	    age: 21
	  interests: 
	    - zhangsan
	    - lisi
	    - wangwu
	  animal: [阿狗,阿猫,阿奇]
	  score: 
	    english: 120
	    math: 150
	  salarys: 
	    - 88.9
	    - 99.8
	    - 75.1
	  allPets: 
	    health: 
	      - name: 阿狗
	        age: 23
	      - name: 阿奇
	        age: 67
	    unhealth: 
	      - {name: 阿彪,age: 21}
	      - {name: 阿狗,age: 12} 
	

在这里插入图片描述

五、spring-boot-web开发

5.1、静态资源访问

5.1.1、静态资源目录

  • 只要当静态资源放在类路径下:static、public、resources、META-INF/resources。通过静态资源名称就可以进行访问。

  • 原理:静态映射/**。请求进来,先去找Controller看能不能处理,不能处理的请求就交给静态资源处理,如果静态资源也找不到则就报404。

5.1.2、静态资源访问前缀

  • 默认是无前缀。
  • 如果需要加前缀,首先要在yaml文件里配置前缀。例如下面所示,就配置上了一个res前缀。
spring:
  mvc: 
    static-path-pattern: /res/**

再次访问静态资源时就需要加上前缀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值