spring boot笔记

spring boot笔记

什么是springboot

​ 把Spring Boot称为搭建程序的 脚手架 。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注于业务而非配置。
​ 我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程。

Spring Boot 主要特征是:

  • 创建独立的spring应用程序
  • 直接内嵌tomcat、jetty和undertow(不需要打包成war包部署)
  • 提供了固定化的“starter”配置,以简化构建配置
  • 尽可能的自动配置spring和第三方库
  • 提供产品级的功能,如:安全指标、运行状况监测和外部化配置等
  • 绝对不会生成代码,并且不需要XML配置

SpringBoot提供了一个名为spring-boot-starter-parent的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!

入门demo

1. xml

	<modelVersion>4.0.0modelVersion>
  <groupId>cn.itcast.springbootgroupId>
  <artifactId>itcast-springbootartifactId>
  <version>1.0-SNAPSHOTversion>
  
  <parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.0.6.RELEASEversion>
  parent>
  <dependencies>
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-webartifactId>
    dependency>
  dependencies>
project>

2. 编写controller

@RestController
@EnableAutoConfiguration
public class HelloController {
  @GetMapping("show")
  public String test(){
    return "hello Spring Boot!";
 }
  public static void main(String[] args) {
    SpringApplication.run(HelloController.class, args);
 }
}

​ 这里没有配置任何的信息,如访问路径,tomcat端口都没有说明。这就是Springboot自动配置。

​ 可以直接 localhost:880880/show 访问

3. demo详解

  • 引入启动器,只有有了启动器才能用相关注解实现相关功能。

    @EnableAutoConfiguration

  • 由于导入的启动器中使用了spring-boot-starter-parent启动器,它可以保证在自动导入依赖时不会冲突。

    SpringBoot根据spring-boot-starter-web这个依赖自动引入的,而且所有的版本都已经管理好,不会出现冲突。

  • springboot如何“猜测”需要哪个依赖?

    主要是通过引入的启动器,配置的bean来猜测。

引导类

​ 一个springboot只能有一个main方法,来监听8080端口。对于多个业务操作,就无法启动。使用引导类来通过读取注解来启动。

一个springboot工程中都会在基包下创建一个引导类,一些springboot的全局注解
(@EnableAutoConfiguration注解)以及springboot程序的入口main方法都放在该类中。

@EnableAutoConfiguration
@ComponentScan
public class TestApplication {
  public static void main(String[] args) {
    SpringApplication.run(TestApplication.class, args);
 }
}

启动类:

  1. @EnableAutoConfiguration 配置自动配置

  2. @ComponentScan,运行引导类,会去扫描包中注解过的类,运行

    如同spring的xml配置

通过basePackageClasses或者basePackages属性来指定要扫描的包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包

​ 将从声明这个注解的类所在的包开始,扫描包及子包。而我们的@ComponentScan注解声明的类就是main函数所在的启动类,因此扫描的包是该类所在包及其子包。

一般启动类会放在一个比较浅的包目录中。

引导类专属注解@SpringBootApplication

@SpringBootApplication
public class TestApplication {
  public static void main(String[] args) {
    SpringApplication.run(TestApplication.class, args);
 }
}

@SpringBootApplication 相当于@EnableAutoConfiguration和@ComponentScan注解,

说明该类是引导类




配置类

​ springboot彻底放弃了xml的使用,所以使用java纯代码的形式来配置

java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:

  • @Configuration :声明一个类作为配置类,代替xml文件
  • @Bean :声明在方法上,将方法的返回值加入Bean容器,代替 标签
  • @Value :属性注入
  • @PropertySource :指定外部属性文件。

配置jdbc

1. 首先在pom.xml中,引入Druid连接池依赖:

<dependency>
  <groupId>com.github.drtranggroupId>
  <artifactId>druid-spring-boot2-starterartifactId>
  <version>1.1.10version>
dependency>

2. resources 目录下放置数据库配置信息

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/leyou
jdbc.username=root
jdbc.password=123

3. java配置类

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfiguration {
  @Value("${jdbc.url}")
  String url;
  @Value("${jdbc.driverClassName}")
  String driverClassName;
  @Value("${jdbc.username}")
  String username;
  @Value("${jdbc.password}")
  String password;
  @Bean
  public DataSource dataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setUrl(url);
    dataSource.setDriverClassName(driverClassName);
    dataSource.setUsername(username);
    dataSource.setPassword(password);
    return dataSource;
 }
}

jdbc配置类说明

  • @Configuration :声明 JdbcConfiguration 是一个配置类。

  • @PropertySource :指定属性文件的路径是: classpath:jdbc.properties

  • @Value 为属性注入值。

  • @Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。相当于以前的bean标签

    使用配置类来获取配置,只需要 @Autowired 注入DataSource。


Springboot 实现配置类

@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
  private String url;
  private String driverClassName;
  private String username;
  private String password;
  // ... 略
  // getters 和 setters
}
  • 在类上通过@ConfigurationProperties注解声明当前类为属性读取类
    prefix=“jdbc” 读取属性文件中,前缀为jdbc的值。
  • 在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致,并且必须具有getter和setter方法
  • 需要注意的是,这里我们并没有指定属性文件的地址,SpringBoot默认会读取文件名为
    application.properties的资源文件,所以我们把jdbc.properties名称改为
    application.properties

在JdbcConfiguration中使用这个属性:

  • 通过 @EnableConfigurationProperties(JdbcProperties.class) 来声明要使用
    JdbcProperties 这个类的对象
  • 然后你可以通过以下方式在JdbcConfiguration类中注入JdbcProperties:
  1. @Autowired注入

    @Configuration
    @EnableConfigurationProperties(JdbcProperties.class)
    public class JdbcConfiguration {
      @Autowired
      private JdbcProperties jdbcProperties;
      @Bean
      public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl(jdbcProperties.getUrl());
        dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
        dataSource.setUsername(jdbcProperties.getUsername());
        dataSource.setPassword(jdbcProperties.getPassword());
        return dataSource;
     }
    }
    

    这种方法就是简单的自动注入对象,通过类的get方法来获取相关数据,笨方法

  2. 构造函数注入

    @Configuration
    @EnableConfigurationProperties(JdbcProperties.class)
    public class JdbcConfiguration {
        
      private JdbcProperties jdbcProperties;
        
      public JdbcConfiguration(JdbcProperties jdbcProperties){
        this.jdbcProperties = jdbcProperties;
     }
      @Bean
      public DataSource dataSource() {
        // 略
     }
    
    

    也同样是笨方法,连自动注入都不需要,创建出对象后,直接在构造方法中作为参数传入,来保证每次构建对象就会导入配置类。

  3. @Bean方法的参数注入

    @Configuration
    @EnableConfigurationProperties(JdbcProperties.class)
    public class JdbcConfiguration {
      @Bean
      public DataSource dataSource(JdbcProperties jdbcProperties) {
        // ...
     }
    }
    

你可能感兴趣的:(框架学习)