SpringBoot

SpringBoot

image-20220322205111812

1.概述

1.1 为什么需要springboot?

现有的SSM(spring+springMVC+mybatis)框架存在的问题

  • 大量的maven冗余配置,依赖
  • 每次构建项目都需要花费大量时间来编写大量的相同配置
  • 整合第三方技术都需要编写相关配置文件
  • 项目测试每次都需要部署到Tomcat
1.2 引言

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不 再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应 用开发领域(rapid application development)成为领导者。

Spring Boot 全新框架 作用: 简化spring应用初始搭建和开发过程

如何简化: 开发人员使用springboot只要基于特定方式进行配置 简化spring使用

SpringBoot 微框架: 5分钟 完成之前ssm中环境

springboot(微框架) = springmvc(控制器) + spring core(项目管理)

1.3 spring的优势
  1. 创建完整的独立的Spring应用程序 spring springmvc 只有一个容器
  2. 嵌入的Tomcat,无需部署WAR文件 springboot 内嵌tomcat 应用跑在内嵌服务器
  3. 简化Maven配置,自动配置Spring Springmvc,没有XML配置 几个依赖
    • 用来springboot spring应用再无xml
1.4 SpringBoot的约定
  • springboot 项目中必须在**src/main/resources中放入application.yml(.properties)核心配置文件 名字必须为:application

  • springboot 项目中必须在**src/main/java中所有子包之外构建全局入口类型,xxApplication,入口类一个springboot项目只能有一个

约定的项目结构:

image-20220321104543221


2.HelloWorld(第一个springboot)

2.1 搭建步骤
  1. pom.xml
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.4</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
    <!--引入springboot的web支持-->
	<dependency>
     	<groupId>org.springframework.boot</groupId>
    	 <artifactId>spring-boot-starter-web</artifactId>
	</dependency>

	<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
 
  1. 引入配置文件application.yml

    src/main/resources/application.yml

    image-20220321105700811

    server:
      port: 8181  #自定义访问的端口号
      servlet:
        context-path: /boot   #项目的根目录
    
  2. 编写入口类

    @SpringBootApplication
    public class Boot01Application {
         
    	//main方法里面必须有SpringApplication.run()方法,且参数为该入口类的class对象和main的参数args
        public static void main(String[] args) {
         
            SpringApplication.run(Boot01Application.class, args);
        }
    
    }
    
  3. 启动项目测试运行

    image-20220321110358910

    没有报错的话表示项目环境搭建正常可以继续进行下一步操作

  4. 建立并创建控制器Controller

    /**
     * @author Liu
     */
    @RestController
    public class HelloController {
         
    
        @RequestMapping("hello")
        public String hello(){
         
            System.out.println("hello");
            return "hello";
        }
    }
    
  5. 访问项目

    项目的路径为http://localhost:8181/boot/hello

    http://localhost:(配置的端口号) / (配置的项目路径) / (访问路径)

  6. 测试访问

    image-20220321110738994

这里第一个简单的hello world就搭建完成了,比传统的ssm开发简洁了不少

2.2 相关注解说明

入口类 SpringApplication

  • SpringBootApplication: 全局入口类 有且只能有一个
  • main 函数参数可以在启动时指定jvm参数覆盖默认配置

@SpringBootApplication 注解等价于:

  • @SpringBootConfiguration 标识这是一个springboot的配置类,默认自定配置Spring环境
  • @EnableAutoConfiguration 自动与项目中集成的第三方技术进行集成
  • @ComponentScan 扫描入口类所在子包以及子包后代包中注解
2.3 配置文件
2.3.1 配置文件的拆分

说明: 在实际开发过程中生产环境和测试环境有可能是不一样的 因此将生产中的配置和测试中的配置拆分开,是非常必要的在springboot中也提供了配置文件拆分的方式. 这里以生产中项名名称不一致为例:

  • 生产中项目名为: boot_prod

  • 开发中项目名为: boot_dev

  • 端口同时为: 8080

image-20220321113118451

application.yml

#主配置文件 书写公共配置
server:
  port: 8181  #自定义访问的端口号

#在主配置文件中,指定哪一个环境生效
spring:
  profiles:
    active: dev #指定那个环境配置生效 dev为环境配置文件的简名

application-dev.yml

#development:开发环境
server:
  servlet:
    context-path: /boot_dev

application-prod.yml

#product 生产环境的配置文件
server:
  servlet:
    context-path: /boot_prod #项目访问路径

测试路径:

image-20220321114600050

2.3.2 启动指定的配置文件

说明: 往往在企业级开发过程中为SpringBoot应用启动时指定一个完整外部配置也是经常用到的,在SpringBoot中也提供这个方式来启动项目如

  1. 创建一个完整的配置文件

image-20220321115248677

  1. 启动时指定配置文件位置

–spring.config.location=C:\Users\ASUS\IdeaProjects\JavaWeb\review\review\boot-01\src\main\resources\application-local.yml

image-20220321115542565

image-20220321115609739


3.工厂创建对象

3.1 创建单个对象

在springboot中可以管理单个对象可以直接使用spring框架中注解形式创建。

  • @Component 通用的对象创建注解
    • @Controller 用来创建控制器对象
    • @Service 用来创建业务层对象
    • @Repository 用来创建DAO层对象
    • 以上注解都有value属性,value属性用来指定工厂中对象名称
3.2 创建多个对象

​ 如何在springboot中像spring框架一样通过xml创建多个对象,在SpringBoot中也提供了相同注解如**@Configuration + @Bean**注解进行创建

  • @Configuration 代表这是一个spring的配置类相当于Spring.xml配置文件
  • @Bean 用来在工厂中创建这个@Bean注解标识的对象
    • 默认使用@Bean创建对象在工厂中唯一标识为方法名称
    • 修改在工厂中对象标识可以在使用**@Bean(“工厂中名字”)指定一个名字**

管理复杂对象的创建

/**
 * @author Liu
 * SpringBoot配置类
 */
@Configuration
public class Beans {
   
//    复杂对象的创建
    @Bean
    public Calendar calendar(){
   
        return Calendar.getInstance();
    }
}

使用复杂对象还是通过@AutoWired注入属性

@SpringBootTest
class Boot01ApplicationTests {
   

    @Autowired
    private Calendar calendar;

    @Test
    void contextLoads() {
   
        System.out.println("hello world");
        System.out.println(calendar.getTime());
        //hello world
        //Mon Mar 21 13:41:30 CST 2022  
    }

}
  1. @Configuration 用来在工厂中一次性创建多个对象

  2. @Component 用来创建单个对象


4.属性注入

4.1 通过@Value 实现基本属性注入

实例:

注入基本类型、数组、日期类型、String

  • 配置文件:

    #基本数据类型 + string + date
    name: 张三
    age: 21
    sex: true
    price: 22.22
    birthday: 2000/11/29 05:20:00 #spring中的日期格式为
    
    #数组类型
    array: arr1,arr2,arr3,arr4
    list: list1,list2,list3,list4
    map: "{'aa':'1234','bb':'2344'}"
    
  • 测试:

@SpringBootTest
class Boot01ApplicationTests {
   
    //基本数据类型 + string + date
    @Value("${name}")
    private String name;
    @Value("${age}")
    private Integer age;
    @Value("${sex}")
    private Boolean sex;
    @Value("${price}")
    private Double price;
    @Value("${birthday}")
    private Date birthday;

    //数组类型
    @Value("${array}")
    private String[] array;
    @Value("${list}")
    private List<String> list;
    @Value("#{${map}}")
    private Map<String,String> map;


    @Test
    void di(){
   
        System.out.println("基本数据类型 + string + date");
        System.out.println("name = " + name);
        System.out.println("age = " + age);
        System.out.println("sex = " + sex);
        System.out.println("price = " + price);
        System.out.println("birthday = " + birthday);

        System.out.println("数组类型");
        System.out.println("array = ");
        for (String s : array) {
   
            System.out.println(s);
        }
        System.out.println("list = " + list);
        System.out.println("map = " + map);
//        基本数据类型 + string + date
//        name = 张三
//        age = 21
//        sex = true
//        price = 22.22
//        birthday = Wed Nov 29 05:20:00 CST 2000
//        数组类型
//        array =
//        arr1
//        arr2
//        arr3
//        arr4
//        list = [list1, list2, list3, list4]
//        map = {aa=1234, bb=2344}
    }
}

注意map集合的取值为 @Value("#{${map}}")

4.2 通过对象方式实现属性注入

注意:这种方式需要提供set方法

  • 配置文件:
#对象方式注入
user:
  id: 1
  username: 李四
  age : 23
  birthday : 2020/02/02
  #对象属性集合类型
  users:
    - {
    id: 1, name: zhangsan, age: 20 ,birthday: 2000/11/16 }
    - {
    id: 2, name: lisi, age: 21 ,birthday: 2000/12/11 }
    - {
    id: 3, name: wangwu, age: 22 ,birthday: 2000/11/29 }
  • 测试代码
    • 注意:
      • 必须提供@component
      • 必须提供属性的set方法
      • 修饰范围在类上,用来指定前缀的属性,注入到对象中的属性名一致的属性当中
      • 可以将对象集合注入
@SpringBootTest
@Component //必须提供component
@ConfigurationProperties(prefix = "user") //修饰范围在类上,用来指定前缀的属性,注入到对象中的属性名一致的属性当中
@Setter//必须提供属性的set方法
public class Test1 {
   
    private Integer id;
    private String username;
    private Integer age;
    private Date birthday;
    private List <User> users;

    @Test
    void test(){
   
        System.out.println("id = " + id);
        System.out.println("username = " + username);
        System.out.println("age = " + age);
        System.out.println("birthday = " + birthday);
        users.forEach(user -> System.out.println(user));
//        id = 1
//        username = 李四
//        age = 23
//        birthday = Sun Feb 02 00:00:00 CST 2020
//        User(id=1, name=zhangsan, age=20, birthday=Thu Nov 16 00:00:00 CST 2000)
//        User(id=2, name=lisi, age=21, birthday=Mon Dec 11 00:00:00 CST 2000)
//        User(id=3, name=wangwu, age=22, birthday=Wed Nov 29 00:00:00 CST 2000)

    }
}

引入依赖构建自定义的元数据,否则idea会提示异常

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

5.JSP模板集成

5.1 步骤

jsp相关

<!--c标签库-->
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!--让内嵌tomcat具有解析jsp功能-->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

引入jsp运行插件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值