springboot学习笔记

学习链接

1.关于springboot

1.1 spring和springboot

spring生态包含很多开源框架,如spring,springboot,springcloud,springData
springboot就是集成其他spring系列的框架,让他们之间协同工作更简单,配置更方便。

1.2 springboot的优点:

1. 创建独立Spring应用,(springboot是更高级的框架,底层为spring,spring底层为jdk)
2. 内嵌web服务器,(不用把项目打包成war,发布到如tomcat服务器上)
3. 自动配置Spring以及第三方功能(如开发web程序,只需要导入web包就能自动配置开发web对应的依赖,且自动协调它们之间版本关系)
4. 提供生产级别的监控、健康检查及外部化配置(如运维人员可以很方便的监控项目的状态)
5. 无代码生成、无需编写XML(自动配置的不会生成代码和xml,全部都集成在框架中)

1.3 springboot的缺点:

1. 人称版本帝,迭代快,需要时刻关注变化
2. 封装太深,内部原理复杂,不容易精通

1.4 如何学习springboot

通过官网,了解springboot升级的特性spring官网

1.5 注意事项

  1. springboot2.0升级是因为jdk升级到jdk8后,spring生态里的框架也随之升级,从而springboot也迎来了大版本的升级。springboot2,对jdk8+和maven3.3+都有版本要求

2. springboot构建

2.1创建步骤

  1. 首先构建一个maven项目
  2. 然后在pom.xml引入springboot依赖和web依赖
  3. 配置属性都写在resources下的application.properties中。如端口号
  4. 创建主程序,在类上添加@SpringBootApplication表示启动类。
  5. 创建一个controller类接受映射。在类上添加@Controller,在方法上添加@RequestMapping("/hello")。

注意事项:

  1. 在方法前添加@responseBody,返回的内容直接显示在浏览器。(在类前添加,表示对类中所有方法生效)
  2. @ResponseBody和@Controller可以合写成@RestController

2.2 项目部署

springboot支持直接打包成jar,直接在目标服务器运行。
步骤:

  1. 先引入maven依赖:spring-boot-maven-plugin
  2. 然后直接在idea右边的maven中打包即可
    在这里插入图片描述
  3. 生成的jar文件在target中

3. springboot配置说明

3.1 依赖管理

  1. pom.xml中的spring-boot-starter-parent的父项目spring-boot-dependencies声明了开发中常用的依赖的版本好,所以写maven的时候不用写版本号

  2. 可以修改默认版本号
    在这里插入图片描述

  3. spring-boot-starter-* : *就某种场景,只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。

3.2 自动配置

  1. 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来(例如可以直接加@Controller等,都会被扫描到)

  2. 想要改变扫描路径,在主程序类改为@SpringBootApplication(scanBasePackages=“com.atguigu”)或者@ComponentScan 指定扫描路径

  3. 配置拥有默认值,默认配置最终都是映射到某个类上,如:MultipartProperties。可以在配置文件application.propertise中修改默认值。springboot会按需加载所有自动配置项,如之引入了web依赖,除web外的依赖的默认值就不会配置。

  4. 组件配置
    原先组件通过xml 配置bean,现在通过类(@Configuration+@Bean结合配置)
    步骤:

    1. 在类前添加@Configuration表示配置类:
      @Configuration(proxyBeanMethods = true【默认值,保证每个@Bean方法被调用多少次返回的组件都是单实例的】
      @Configuration(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
    2. 在方法前添加@Bean,表示给容器注册组件,默认也是单实例的
      @Bean 组件名则为方法名
      @Bean(“tom”) 组件名为tom

    注:

    1. @Bean注解的方法返回值是对象,可以在方法中为对象设置属性。(注解方法)
    2. @Component(注解类)
  5. 查看组件:

    1. 在主方法中:
      获取IOC容器:ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
    2. 从容器中获得组件:Pet tom02 = run.getBean(“tom”, Pet.class);//pet类是我们自己组测的组件
  6. @Import({User.class, DBHelper.class})// 给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名

  7. 条件装配@Conditional
    在这里插入图片描述
    如:在方法前@ConditionalOnBean(name=“tom")表示包含组件tom时才执行此方法。(也可以加在类前)

  8. 原生配置文件引入
    @ImportResource(classpath:beans.xml):对于xml组件的配置方式(这里为当前路径下的beans.xml文件),可以通过此注解将xml中的组件装配到容器中

  9. 配置绑定
    之前相关配置,比如数据库的地址端口,是先写在配置文件中,然后在代码中要使用时,读取配置文件,遍历找到需要的属性,再赋值给数据库地址端口
    现在两种方式:
    1.在需要绑定的类前添加
    @Component//只有在容器中的组件,才会拥有SpringBoot提供的强大功能
    @ConfigurationProperties(prefix = “mycar”)//配置文件application.propertises中写mycar.price=100000,mycar.band=yh

    2.在需要绑定的类前添加
    @ConfigurationProperties
    然后在主方法前添加@EnableConfigurationProperties(Car.class)

    在使用时:
    @Autowired
    Car car;//car里的price和band就为配置文件中的值

  10. 自动配置原理:
    • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
    • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定
    • 生效的配置类就会给容器中装配很多组件
    • 只要容器中有这些组件,相当于这些功能就有了
    • 定制化配置
    用户直接自己@Bean替换底层的组件
    用户去看这个组件是获取的配置文件什么值就去修改。
    • 流程:xxxxxAutoConfiguration —> 组件 —> xxxxProperties里面拿值 ----> application.properties

4. 实践步骤

  1. 引入场景依赖
    • https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
  2. 查看自动配置了哪些(选做)
    • 自己分析,引入场景对应的自动配置一般都生效了
    • 配置文件中debug=true开启自动配置报告。Negative(不生效)\Positive(生效)
  3. 是否需要修改
    参照文档修改配置项
    • 自己分析。xxxxProperties绑定了配置文件的哪些。
  4. 自定义加入或者替换组件
    • @Bean、@Component。。。
  5. 自定义器 XXXXXCustomizer;

5. 开发技巧:

5.1 lombok (可以自动生成实体类中的get,set,tostring,有参无参构造方法)
步骤:

  1. pom.xml中引入

    <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
    </dependency>
    
  2. idea中搜索安装lombok插件

  3. 使用 ( 在需要生成的实体类前添加)
    @NoArgsConstructor//生成无参构造方法
    @AllArgsConstructor//生成全参构造方法
    @Data//生成get ,set方法
    @ToString//生成toString方法
    @Slf4j //日志,使用直接在类下的方法中log.info(“请求…”);

5.2 热部署:dev-tools

spring initializer:创建项目时,勾选项目需要的功能,直接添加pom.xml相关依赖等

5.3 配置文件简化 :yaml

之前是将配置写在application.propertises中,现在可以写在application.yml中
文件结尾可以为:yml或者yaml

可以为yaml文件增加提示功能,如写类会显示其对应的方法:
步骤:

  1. 引入maven依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
  1. 因为这个跟项目运行无关,所以在打包的时候可以去除这些内容,可以在maven中增加下面内容,表示打包时去除此项
	<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!-----这是增加的内容以及位置----->
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
                <!------------------------------->
            </plugin>
        </plugins>
    </build>

6.web开发相关:

6.1静态资源

  1. 静态资源访问
    只要在类路径下: /static (or /public or /resources or /META-INF/resources都称为静态资源,都可以直接访问,页面请求时,一般会先去Controller里找是否有对应的映射,没有就会去静态资源找。可以改变静态路径位置。一般网站开发在用户未登录前是不能访问某些页面,所以会做拦截,所以为了避免将静态资源拦截,一般静态资源前会额外加一个路径,然后在拦截的地方开放静态资源的访问。
  2. 初始页面,页面图标
    默认index.html favicon.ico放在静态资源,自动识别。(注意:配置静态资源前缀会影响识别)

6.2 Rest表单提交:

  • 同一张表可能删除,添加,修改,查看操作,一个对应一个映射太麻烦,就可以使用一个映射的方法。在表单提交的时候做相关处理就能实现。
    (约定: GET-获取用户 DELETE-删除用户 PUT-修改用户 POST-保存用户)
  • 实现步骤:
  1. 首先配置开启表单rest风格功能:

    spring:
      mvc:
        hiddenmethod:
          filter:
            enabled: true   #开启页面表单的Rest功能
    
  2. 映射写法:
    @RequestMapping(value = “/user”,method = RequestMethod.GET)
    @RequestMapping(value = “/user”,method = RequestMethod.DELETE)
    @RequestMapping(value = “/user”,method = RequestMethod.PUT)
    也可简写为
    @GetMapping
    @DELETEMapping

  3. 表单写法
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值