springboot的四种属性注入的方式

springboot属性注入的四种方式

这篇文章主要和大家分享下springboot的四种属性注入方式,需要先掌握一些的springboot相关的知识。

第一种:通过@autowired进行注入

本次以数据库连接所需的属性为例进行分析,具体的步骤如下:

  1. 需要有springboot启动类和简单的controller层的文件,用于测试,在下面的截图中可以看到controller层简单的代码。
  2. 定义一个资源配置文件,在springboot中,只有一个资源配置文件,也就是:application.properties(yml)。在里面写数据库配置的一些相关信息,如下:
    * jdbc.driverClassName=com.mysql.jdbc.Driver
    * jdbc.url=jdbc:mysql://localhost:3306/zzh
    * jdbc.uname=root
    * jdbc.password=root
  3. 定义一个数据库信息的属性读取类JdbcProperties,在类上写@ConfigurationProperties注解,并配置prefix属性,prefix即前缀的意思,在本案例中为:jdbc。接着在类中定义属性,属性名称要和配置文件的字段名字一致,并生成getter和setter方法。代码如下:
@ConfigurationProperties(prefix = "jdbc")
//@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcProperties {
     

    private String driverClassName;

    private String url;

    private String uname;

    private String password;

    public String getDriverClassName() {
     
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
     
        this.driverClassName = driverClassName;
    }

    public String getUrl() {
     
        return url;
    }

    public void setUrl(String url) {
     
        this.url = url;
    }

    public String getUname() {
     
        return uname;
    }

    public void setUname(String username) {
     
        this.uname = username;
    }

    public String getPassword() {
     
        return password;
    }

    public void setPassword(String password) {
     
        this.password = password;
    }
}
  1. 接着定义一个数据库资源配置类JdbcConfiguration,类上定义@Configuration声明该类是一个java配置类,再使用@EnableConfigurationProperties(属性读取类的字节码文件)。再者,在类中定义属性读取类,并通过@Autowired注解进行注入。最后定义方法获得DadaSource对象。代码块如下:
@Configuration // 声明一个类为一个Java配置类
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
     

    @Autowired
    private JdbcProperties jdbcProperties;

    @Bean   // 把方法的返回值注入到spring容器
    public DataSource dataSource() {
     
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());
        dataSource.setUrl(this.jdbcProperties.getUrl());
        dataSource.setUsername(this.jdbcProperties.getUname());
        dataSource.setPassword(this.jdbcProperties.getPassword());
        return dataSource;
    }
}
  1. 通过springboot启动类进行启动,如下图,可以看到DataSource重要属性就注入成功了。
    springboot的四种属性注入的方式_第1张图片

第二种:通过构造方法进行注入

在第一种配置的基础上略作修改,过程如下:

  1. 在JdbcConfiguration类中,不使用@Autowired注解对JdbcProperties属性读取类进行注入,而是写一个构造方法对其进行读取,代码块如下:
@Configuration // 声明一个类为一个Java配置类
//@PropertySource("classpath:jdbc.properties")
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
     

    private JdbcProperties jdbcProperties;

    public JdbcConfiguration(JdbcProperties jdbcProperties) {
     
        this.jdbcProperties = jdbcProperties;
    }
  1. 同上,使用springboot启动类,设置断点,debug启动,看效果,如下图所示。
    springboot的四种属性注入的方式_第2张图片

第三种:通过方法的形参调用进行配置

在JdbcConfiguration的获取DataSource对象中,我们可以在里面添加JdbcProperties的形参进行属性配置,直接上代码块:

@Configuration // 声明一个类为一个Java配置类
//@PropertySource("classpath:jdbc.properties")
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
     
    @Bean   // 把方法的返回值注入到spring容器
    public DataSource dataSource(JdbcProperties jdbcProperties) {
     
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
        dataSource.setUrl(jdbcProperties.getUrl());
        dataSource.setUsername(jdbcProperties.getUname());
        dataSource.setPassword(jdbcProperties.getPassword());
        return dataSource;
    }
}

这种方式也能获取到DataSource对象的四大属性值。

第四种:在方法上使用@ConfigurationProperties注解

@ConfigurationProperties注解不仅可以用在类上,还可以用在方法上,这种方法的代码非常简单。在获取DataSource对象的方法上添加该注解,并指定前缀,代码块如下:

@Configuration // 声明一个类为一个Java配置类
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
     
    @Bean   // 把方法的返回值注入到spring容器
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
     
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }
}

如此,也能读取DataSource重要的四大属性。
以上便是springboot的四种属性注入的方式,第一种方式使用的会比较多,更符合我们的书写习惯/但是,从中可能会碰到一个问题就是:

  • 配置数据源出错:Error creating bean with name ‘dataSource’ defined…
    这时候不要慌张,这种原因可能是名字和DataSource的属性名字冲突,可以把配置文件中jdbc.username改成jdbc.uname或者其他,同样的,属性读取类也要做相应的变化,通过这种方法便解决了该问题。
    还在学习web的过程中,理解没有大牛深,有哪些不足之处,欢迎指证,谢谢大家。

你可能感兴趣的:(javaweb学习,java,spring,spring,boot,后端)