spring-boot深度解析

spring-boot深度解析,第1张

spring-boot深度解析 SpringBoot 什么是 Spring Boot?

Spring Boot设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,是为了让开发人员尽可能快的创建并允许Spring 应用程序,尽可能减少项目的配置文件。

从最根本上来讲,Spring Boot 就是一些库的集合,它能够被任意项目的构建系统所使用。它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让你的项目快速运行起来。所以 spring boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包,spring boot 整合了所有的框架。

总结起来就是:

(1)为所有 Spring 开发提供一个更快更广泛的入门体验。

(2)零配置。无冗余代码生成和XML 强制配置,遵循“约定大于配置” 。

(3)集成了大量常用的第三方库的配置, Spring Boot 应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。

(4)提供一系列大型项目常用的非功能性特征,如嵌入式服务器、安全性、度量、运行状况检查、外部化配置等。

(5)Spring Boot 不是Spring 的替代者,Spring 框架是通过 IOC 机制来管理 Bean 的。Spring Boot 依赖 Spring 框架来管理对象的依赖。Spring Boot 并不是Spring 的精简版本,而是为使用 Spring 做好各种产品级准备。

SpringBoot核心功能

1、独立运行Spring项目
Spring boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。
2、内嵌servlet容器
Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。
3、提供starter简化Maven配置
spring提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web,会自动加入依赖包。
4、自动装配Spring
SpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot灭有提供支持,则可以自定义自动配置。
5、准生产的应用监控
SpringBoot提供基于http ssh telnet对运行时的项目进行监控。
6、无代码生产和xml配置

SpringBoot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性。

SpringBoot优缺点 优点:

1、快速构建项目。
2、对主流开发框架的无配置集成。
3、项目可独立运行,无须外部依赖Servlet容器。
4、提供运行时的应用监控。
5、极大的提高了开发、部署效率。
6、与云计算的天然集成。

缺点:

1、如果你不认同spring框架,也许这就是缺点。
2、SpringBoot特性
3、创建独立的Spring项目
4、内置Tomcat和Jetty容器
5、提供一个starter POMs来简化Maven配置
6、提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等
7、完全没有代码生成和xml配置文件

SpringBoot几个常用的注解

(1)@RestController和@Controller指定一个类,作为控制器的注解 ,并说明其区别
(2)@RequestMapping方法级别的映射注解,这一个用过Spring MVC的小伙伴相信都很熟悉
(3)@EnableAutoConfiguration和@SpringBootApplication是类级别的注解,根据maven依赖的jar来自动猜测完成正确的spring的对应配置,只要引入了spring-boot-starter-web的依赖,默认会自动配置Spring MVC和tomcat容器
(4)@Configuration类级别的注解,一般这个注解,我们用来标识main方法所在的类,完成元数据bean的初始化。
(5)@ComponentScan类级别的注解,自动扫描加载所有的Spring组件包括Bean注入,一般用在main方法所在的类上
(6)@importResource类级别注解,当我们必须使用一个xml的配置时,使用@importResource和@Configuration来标识这个文件资源的类。
(7)@Autowired注解,一般结合@ComponentScan注解,来自动注入一个Service或Dao级别的Bean
(8)@Component类级别注解,用来标识一个组件,比如我自定了一个filter,则需要此注解标识之后,Spring Boot才会正确识别。

1.、解析 pom.xml 文件:

(1)让我们来看看默认生成的 pom.xml 文件中到底有些什么:



    4.0.0

    com.xpwi
    springboot
    0.0.1-SNAPSHOT
    jar

    springboot
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.0.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



(2)我们可以看到一个比较陌生一些的标签 ,这个标签是在配置 Spring Boot 的父级依赖:


        org.springframework.boot
        spring-boot-starter-parent
        2.1.0.RELEASE
         
 

有了这个,当前的项目才是 Spring Boot 项目,spring-boot-starter-parent 是一个特殊的 starter ,它用来提供相关的 Maven 默认依赖,使用它之后,常用的包依赖就可以省去 version 标签。

2 使用注解@ConfigurationProperties映射

通过注解**@ConfigurationProperties(prefix=“配置文件中的key的前缀”)**可以将配置文件中的配置自动与实体进行映射

application.properties配置如下:

person:
  name: zhangsan
  age: 18
或者,application.yml配置如下:
person:
  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方法

8.SpringBoot与整合其他技术 1 SpringBoot整合Mybatis 1 .添加Mybatis的起步依赖


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.1.1

2.添加数据库驱动坐标


    mysql
    mysql-connector-java

3 添加数据库连接信息

在application.properties中添加数据量的连接信息

注意:高版本的url现在需要设置时区等信息

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTCuseUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
4 创建user表

在test数据库中创建user表


-- Table structure for `user`-- ----------------------------DROp TABLE IF EXISTS `user`;CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(50) DEFAULT NULL,  `password` varchar(50) DEFAULT NULL,  `name` varchar(50) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
5.创建实体Bean
public class User {    // 主键    private Long id;    // 用户名    private String username;    // 密码    private String password;    // 姓名    private String name;
//此处省略getter和setter方法 .. ..
6 编写Mapper
@Mapperpublic interface UserMapper {	public List queryUserList();}

注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中

7 .配置Mapper映射文件

在srcmainresourcesmapper路径下加入UserMapper.xml配置文件"


select * from user 8 .在application.properties中添加mybatis的信息
#spring集成Mybatis环境#pojo别名扫描包mybatis.type-aliases-package=com.itheima.domain#加载Mybatis映射文件mybatis.mapper-locations=classpath:mapper/*Mapper.xml
9 ,编写测试Controller
@Controllerpublic class MapperController {@Autowiredprivate UserMapper userMapper;@RequestMapping("/queryUser")@ResponseBodypublic List queryUser(){    List users = userMapper.queryUserList();    return users;}
10 测试 3.SpringBoot整合Junit 1 添加Junit的起步依赖
    org.springframework.boot    spring-boot-starter-test    test
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 {@Autowiredprivate UserMapper userMapper;@Testpublic void test() {    List users = userMapper.queryUserList();    System.out.println(users);}

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

public final class SpringRunner extends SpringJUnit4ClassRunner

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

3 控制台打印信息

1.SpringBoot整合Spring Data JPA

3.1 添加Spring Data JPA的起步依赖

    org.springframework.boot    spring-boot-starter-data-jpa

3.2 添加数据库驱动依赖

    mysql    mysql-connector-java

3.3 在application.properties中配置数据库和jpa的相关属性

#DB Configuration:spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=123456#JPA Configuration:spring.jpa.database=MySQLspring.jpa.show-sql=truespring.jpa.generate-ddl=truespring.jpa.hibernate.ddl-auto=updatespring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
3.4 创建实体配置实体
@Entitypublic class User {    // 主键    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    // 用户名    private String username;    // 密码    private String password;    // 姓名    private String name;
//此处省略setter和getter方法... ...
3.5 编写UserRepository

public interface UserRepository extends JpaRepository{
public List findAll();

}

3.6 编写测试类

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

@Autowiredprivate UserRepository userRepository;@Testpublic void test(){    List users = userRepository.findAll();    System.out.println(users);}
3.7 控制台打印信息

注意:如果是jdk9,执行报错如下:

原因:jdk缺少相应的jar

解决方案:手动导入对应的maven坐标,如下:

    javax.xml.bind    jaxb-api    2.3.0

jdk8正常

4.SpringBoot整合Redis 1 添加redis的起步依赖
    org.springframework.boot    spring-boot-starter-data-redis
2 配置redis的连接信息
#Redisspring.redis.host=127.0.0.1spring.redis.port=6379
3 注入RedisTemplate测试redis *** 作
@RunWith(SpringRunner.class)@SpringBootTest(classes = SpringbootJpaApplication.class)public class RedisTest {@Autowiredprivate UserRepository userRepository;@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void test() throws JsonProcessingException {    //从redis缓存中获得指定的数据    String userListData = redisTemplate.boundValueOps("user.findAll").get();    //如果redis中没有数据的话    if(null==userListData){        //查询数据库获得数据        List all = userRepository.findAll();        //转换成json格式字符串        ObjectMapper om = new ObjectMapper();        userListData = om.writevalueAsString(all);        //将数据存储到redis中,下次在查询直接从redis中获得数据,不用在查询数据库        redisTemplate.boundValueOps("user.findAll").set(userListData);        System.out.println("===============从数据库获得数据===============");    }else{        System.out.println("===============从redis缓存中获得数据===============");    }    System.out.println(userListData);}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5671641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存