SpringBoot

1.Spring 优点分析:
Spring是java企业版(java Enterprise Edition,JEE,也称为J2EE)的轻量级替代品,无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的java对象(Plain Old Object,POJO)实现了EJB的功能.
2.Spring的缺点分析:
虽然Spring的组件代码是轻量级的,但是它的配置却是重量级的.一开始,Spring用XML配置,而且是很多的XML配置,SPring2.5引入了基于注解的组件扫描,这消除了大量的XML配置,Spring3.0引入了基于java的配置,这是一种类型安全的可重构配置方式,可以代替XML配置文件.
所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。
除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度.
注:在SpringBoot中页面放在resources的templates文件夹中,templates文件夹相当于maven中的WEB-INF文件夹.静态资源放入Static文件夹中.
如果控制器需要使用到视图解析,需要引入spring-cloud-stater-thymeleaf依赖.视图解析器启动器,
并且不需要配置.
二.SpringBoot概述:
SpringBoot对上述spring的缺点进行改善和优化,基于约定优于配置的思想,可以让开发人员不必再配置与逻辑业务之间进行思维的切换,全身心投入到逻辑业务代码的编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期.
SpringBoot的特点:
1.为基于Spring的开发提供更快的入门体验.
2.开箱即用,没有代码生成,也无需XML配置,同时也可以修改默认值满足特定的需求.
3.提供了一些大型项目中常见的非功能性特性,如嵌入式服务器,安全,指标,健康检测,外部配置等.
4.SpringBoot不是对Spring功能上的增强,而是基于起步依赖和自动配置提供了一种快速使用Spring的方式.
SpringBoot的核心功能
1.起步依赖
起步依赖本质上是一个Maven项目对象模型(Project Object Model POM),定义了对其他库的传递依赖,这些东西如在一起即支持某项功能.
2.自动配置
Spring Boot 的自动配置是一个进行时(更准确的说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring的配置应该用哪个,不该用哪个,该过程是Spring自动完成的.
SpringBoot快速入门

  1. 首先创建一个Maven工程,该工程为普通的java工程即可.

  2. 添加SpringBoot的起步依赖,SpringBoot要求,项目要继承SpringBoot的起步依赖Spring-boot-starter-parent

    < parent>
    < groupId>org.springframework.boot< /groupId>
    < artifactId>spring-boot-starter-parent</ artifactId>
    < version>2.1.5.RELEASE</ version>
    </ parent>
    3.SpringBoot要集成springMVC进行Controller的开发,所以项目要导入web的启动依赖

    < dependencies>
    < dependency>
    < groupId>
    org.springframework.boot
    </ groupId>
    < artifactId>
    spring-boot-starter-web
    </ artifactId>
    </ dependency>
    </ dependencies>
    编写SpringBoot的引导类
    要通过SpringBoot提供的引导类起步SpringBoot才可以进行访问.
    package com.itheima;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
(注意:在单独使用SpringBootApplication注解时,前提是启动项必须放在包根目录下,否则在浏览器会报白页,就是404.
第二种使用方式:组合注解
@EnableAutoConfiguration
@ComponentScan(basePackages = “xxx.xx.xx”)
包写启动项的包名
第三种使用方式:
特殊情况即使用@SpringBootApplication注解,又未将启动项放置根目录下则会导致最上边问题,解决方法如下图使用组合注解:
@SpringBootApplication
@ComponentScan(basePackages = “xxx.xx.xx”)
)

public class MySpringBootApplication {
public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class);
}
}
编写Controller
在引导类MySpringBootApplication同级包或者子包中创建QuickStartController
package com.itheima.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class QuickStartController {
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return “springboot 访问成功!”;
}
}

SpringBoot代码解析:
1@Spring Boot Application:标注SpringBoot的启动类,该注解具备多种功能
2.SpringApplication.run()代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象.
Spring Boot工程热部署
我们在开发中反复修改类,页面等资源,每次修改后都需要重启才生效,这样每次启动都很麻烦,浪费了大量的时间,我们可以在修改代码后不重启就能生效,在pom.xml中配置以下依赖,就可以实现热部署.
< dependency>
< groupid>
org.springframework.boot
</ groupid>
< artifactid>
spring-boot-devtools
</ artifactid>
</ dependency>

注意:IDEA进行SpringBoot热部署失败原因

出现这种情况,并不是热部署配置问题,其根本原因是因为Intellij IEDA默认情况下不会自动编译,需要对IDEA进行自动编译的设置,如下:
在这里插入图片描述然后 Shift+Ctrl+Alt+/,选择Registry在这里插入图片描述
SpringBoot原理分析:
1.起步依赖原理分析:
在看过spring-boot-starter-parent的源代码后,可以发现,一部分坐标的版本,依赖管理,插件管理,已经定义好,所以我们的springBoot工程继承
spring-boot-starter-parent后已经具备版本锁定等配置了,所以起步依赖的作用就是依赖的传递.
2.分析spring-boot-starter-web
从spring-boot-starter-web的pom.xml文件中可以看出,spring-boot-starter-web就是将web开发使用的sprin-web,spring-webmvc等坐标进行了打包,这样我们的工程只需要引入spring-boot-starter-web起步依赖的坐标就可以进行web开发了,同样体现了依赖传递的作用.
自动配置原理解析:
Spring Boot配置文件类型和作用
springboot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置,就可以使用application.properties或者application.yml(application.yaml)进行配置.
springboot默认会从Resources目录下加载application.properities或者application.yml文件.
其中application.properties是键值对文件,不再赘述,现在介绍yml配置文件.
application.yml配置文件
1.yml配置文件简介:
yml文件格式是YAML编写的文件格式,YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互,可以被支持YAML库的不同的编程语言的导入,比如 c,c++,等,YML文件是以数据为核心的,比传统的xml方式更加简洁.
YML文件的扩展名可以使用.YML或者.YAML
YML配置文件语法:
1.语法: key:value
注意:value之前有一个空格
2.配置对象数据
语法: key:
key1: value1
key2: value2
或者:
key:{key1:value1,key2:value2}
注意:key1前面的空格个数不限定,在yml语法中,相同缩进代表一个级别.
3.配置map数据:
同上面的对象语法
4.配置数组(List,Set)数据
语法: key:
-value1
-value2
或者:
key:[value1,value2]

#集合中的元素是对象形式
student:

  • name: zhangsan
    age: 18
    score: 100

  • name: lisi
    age: 28
    score: 88

  • name: wangwu
    age: 38
    score: 90
    或者:
    student: [{name: zhangsan,age: 18,score: 100},{…},{…}]
    注意:value1 与之前的-之间存在一个空格
    配置文件与配置类的属性映射方式:
    1.使用注解@Value进行映射
    比如
    application.yml配置如下:
    persion:
    name: zhangsan
    age: 18
    实体bean代码如下:
    @Controller
    public class QuickStartController {

    @Value(" $ { person.name}")
    private String name;
    @Value("$ {person.age}")
    private Integer age;

    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
    return “springboot 访问成功! name=”+name+",age="+age;
    }
    }
    2.使用注解@ConfigurationProperties映射
    通过注解@ConfigurationProperties(prefix=“配置文件中的key的前缀”)可以将配置文件中的配置自动与实体进行映射
    application.yml配置如下:
    persion:
    name: zhangsan
    age: 18
    实体Bean代码如下:
    @Controller
    @ConfigurationProperties(prefix = “person”)
    public class QuickStartController {

    private String name;
    private Integer age;

    @RequestMapping("/quick")
    @ResponseBody
    public String quick(){
    return “springboot 访问成功! name=”+name+",age="+age;
    }

    public void setName(String name) {
    this.name = name;
    }

    public void setAge(Integer age) {
    this.age = age;
    }
    }
    注意:使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但是需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要set方法.
    SpringBoot与整合其他技术
    1.SpringBoot整合Mybyties
    添加Mybatis的起步依赖
    < dependency>
    < groupid>
    org.mybatis.spring.boot
    </ groupid>
    < artifactid>
    mybatis-spring-boot-starter
    </ atrifactid>
    < version>
    1.1.1
    </ version>
    </ dependency>
    添加数据库驱动坐标:
    < dependency>
    < groupid>
    mysql
    </ groupid>
    < artifactid>
    mysql-connector-java
    < / artifactid>
    </ dependency>
    添加数据库连接信息
    在application.properties中添加数据库的连接信息:
    #DB Configuration:
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    spring.datasource.username=root
    spring.datasource.password=root

SpringBoot整合Junit
1.添加Junit的起步依赖
< dependency>
< groupid>
org.springwork.boot
< / groupid>
< artifactid>
spring-boot-starter-test
</ artifactid>
< scope>
test
</ scope>
</ dependency>
2.编写测试类
package com.itheima.test;

import com.itheima.MySpringBootApplication;
import com.itheima.domain.User;
import com.itheima.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = MySpringBootApplication.class)
public class MapperTest {

@Autowired
private UserMapper userMapper;

@Test
public void test() {
List users = userMapper.queryUserList();
System.out.println(users);
}

}
其中,SpringRunner继承自SpringUnit4ClassRunner,使用哪一个Spring提供的测试引擎都可以

@SpringBootTest的属性指定的是引导类的字节码对象

SpringBoot整合Spring Data JPA
1.添加SpringBoot的起步依赖:
< dependency>
< groupid>
org.springframework.boot
</ groupid>
< artifactid>
spring-boot-starter-data-jpa
< /artifactid>
</ dependency>
添加数据库依赖:
< dependency>
< groupid >
mysql
</ groupid >
< artifactid>
mysql-connector-java
</ artifactid>
</ dependency>
在application.propertices中配置数据库和jpa的相关属性

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

#JPA Configuration:
spring.jpa.database=MySQL
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy

创建实体配置实体
@Entity
public class User {
// 主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 用户名
private String username;
// 密码
private String password;
// 姓名
private String name;
//此处省略setter和getter方法… …
}

编写UserRepository
public interface UserRepository extends JpaRepository<User,Long>{
public List findAll();
}
编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes=MySpringBootApplication.class)
public class JpaTest {

@Autowired
private UserRepository userRepository;

@Test
public void test(){
    List<User> users = userRepository.findAll();
    System.out.println(users);
}

}

注意:如果是jdk9,会报错在这里插入图片描述原因是缺少相应的jar
需要手动导入对应的maven坐标
< dependency>
< groupid>
javax.xml.bind
</ groupid>
< artifactid>
jaxb-api
</ artifactid>
< version>
2.3.0
</ version>
</ dependency>
SpringBoot整合Redis
1.添加redis的起步依赖
< dependency>
< groupId>
org.springframework.boot
< /groupId>
< artifactId>
spring-boot-starter-data-redis
</ artifactId>
</ dependency>
配置redis的连接信息
#Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379

SpringBoot集成定时器
使用SpringBoot开发定时器,每隔五秒执行一次.
实现步骤:
1.开启定时器注解
@SpringBootApplication
@EnableScheduling
public class Day01SpringbootIntergrationApplication {
public static void main(String[] args) {
SpringApplication.run(Day01SpringbootIntergrationApplication.class, args);
}

}
2.配置任务类
@Compent
public class TimerUtil {

@Scheduled(cron = “0/3 * * * * ?”)
public void mytask(){
System.out.println(new Date());
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值