Java 微服务 乐优网络商城 day02 源代码 SpringBoot 属性注入 自动配置

Posted 蓝盒子.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 微服务 乐优网络商城 day02 源代码 SpringBoot 属性注入 自动配置 相关的知识,希望对你有一定的参考价值。

一、SpringBoot 属性注入方式一

1、修改jdbc.properties文件的名称

在这里插入图片描述
在这里插入图片描述

2、创建JdbcProperties类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.itzheng.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties
public class JdbcProperties {

    String url;
    String driverClassName;
    String username;
    String password;

}

3、完善pom.xml添加

先安装Lombok
在这里插入图片描述
在这里插入图片描述

引入Lombok
在这里插入图片描述

    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
    </dependency>

4、完善JdbcProperties

添加@Data后会自动生成set和get方法
在这里插入图片描述

package com.itzheng.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {
    String url;
    String driverClassName;
    String username;
    String password;
}

5、修改JdbcConfig类使用JdbcProperties(启用配置属性)

在这里插入图片描述

package com.itzheng.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import javax.sql.DataSource;

@Configuration //声明一个类作为配置类,代替xml文件
//@PropertySource("classpath:application.properties")
@EnableConfigurationProperties(JdbcProperties.class) //使用配置属性
public class JdbcConfig {
//    @Value("${jdbc.url}")
//    String url;
//    @Value("${jdbc.driverClassName}")
//    String driverClassName;
//    @Value("${jdbc.username}")
//    String username;
//    @Value("${jdbc.password}")
//    String password;
    @Bean  //声明在方法上,将方法返回值加入Bean容器,代替<bean>标签
    public DataSource dataSource(JdbcProperties prop){
      DruidDataSource dataSource =  new DruidDataSource();
      dataSource.setDriverClassName(prop.getDriverClassName());
      dataSource.setUrl(prop.getUrl());
      dataSource.setUsername(prop.getUsername());
      dataSource.setPassword(prop.getPassword());
      return dataSource;
    }
}

6、运行代码

添加断点
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7、可以在任意位置使用

在这里插入图片描述

二、SpringBoot 属性注入方式二

1、修改JdbcProperties

在这里插入图片描述

2、修改JdbcConfig

在这里插入图片描述
在这里插入图片描述

    @Bean  //声明在方法上,将方法返回值加入Bean容器,代替<bean>标签
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){
      return  new DruidDataSource();
    }

在这里插入图片描述
全部代码

package com.itzheng.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration //声明一个类作为配置类,代替xml文件
//@PropertySource("classpath:application.properties")
//@EnableConfigurationProperties(JdbcProperties.class) //使用配置属性
public class JdbcConfig {
//    @Value("${jdbc.url}")
//    String url;
//    @Value("${jdbc.driverClassName}")
//    String driverClassName;
//    @Value("${jdbc.username}")
//    String username;
//    @Value("${jdbc.password}")
//    String password;

//    @Autowired
//    JdbcProperties jdbcProperties;
//
//    public JdbcConfig(JdbcProperties jdbcProperties){
//        this.jdbcProperties = jdbcProperties;
//    }

/*
    @Bean  //声明在方法上,将方法返回值加入Bean容器,代替<bean>标签
    public DataSource dataSource(JdbcProperties prop){
      DruidDataSource dataSource =  new DruidDataSource();
      dataSource.setDriverClassName(prop.getDriverClassName());
      dataSource.setUrl(prop.getUrl());
      dataSource.setUsername(prop.getUsername());
      dataSource.setPassword(prop.getPassword());
      return dataSource;
    }
    */

    @Bean  //声明在方法上,将方法返回值加入Bean容器,代替<bean>标签
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){

      return  new DruidDataSource();
    }

}

3、重新运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、SpringBoot 属性注入方式三yaml注入

1、创建application.yaml

在这里插入图片描述
使用更优雅的方式下配置文件

在这里插入图片描述

jdbc:
  driverClassName: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1:3306/itzheng
  username: root
  password: 123
  user:
    name: jack
    age : 21
    language:
      - java
      - python
      - andorid
      - sql

2、完善JdbcProperties

在这里插入图片描述

package com.itzheng.config;
import com.sun.org.apache.xpath.internal.operations.String;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
//@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {
    String url;
    String driverClassName;
    String username;
    String password;
    User user = new User();
    class User{
        String name;
        Integer age;
        List<String> language;
    }
}

四、自动配置

1、@SpringBootApplication

在这里插入图片描述

这个注解的作用与@Configuration作用相同

都是用来声明当前类是一个配置类

可以通过@Bean注解生成IOC容器管理的bean

在QuickStartApplication中定义bean

并在@HelloController中注入使用

下面是@HelloController

留下一个即可
在这里插入图片描述

2、覆盖WebMvcProperties配置服务器相关内容

在这里插入图片描述
在application.yaml当中
在这里插入图片描述

3、总结

SpringBoot为我们提供了默认配置,而默认配置生效的条件一般有两个;

你引入了相关依赖

你自己没有配置Bean

1)启动器

所以,我们如果不想配置,

只需要引入依赖即可,而依赖版本我们也不用操心,

因为只要引入了SpringBoot提供的stater(启动器),就会自动管理依赖及版本了。

因此,玩SpringBoot的第一件事情,就是找启动器,SpringBoot提供了大量的默认启动器

2)全局配置

另外,SpringBoot的默认配置,都会读取默认属性,而这些属性可以通过自定义

application.properties

文件来进行覆盖。这样虽然使用的还是默认配置,

但是配置中的值改成了我们自定义的。

因此,玩SpringBoot的第二件事情,

就是通过 application.properties来覆盖默认属性值,

形成自定义配置。

我们需要知道SpringBoot的默认属性key,非常多。

以上是关于Java 微服务 乐优网络商城 day02 源代码 SpringBoot 属性注入 自动配置 的主要内容,如果未能解决你的问题,请参考以下文章