当前位置:   article > 正文

springboot的将配置文件注入的方法_请简述一下soring boot中如何实现注入配置参数的方法

请简述一下soring boot中如何实现注入配置参数的方法

第一种:注意在配置类上加@Configration,使用@Value分别对单个属性进行注入。(如果不是默认的application.yml或者application.properties还需要加@Properties来制定配置文件)

@Configuration
@PropertySource("classpath:jdbc.properties")//classpath(类路径)是指src文件夹下,否则是file路径,可以参看字母哥的配置文件加载顺序
public class JdbcConfigration {
//value将string和基本类型注入
        @Value("${jdbc.driverClassName}")
        private String driverClassName;
        @Value("${jdbc.url}")
        private String url;
        @Value("${jdbc.username}")
        private String username;
        @Value("${jdbc.password}")
        private String password;

    @Bean//把方法的返回值注入到spring容器
    public DataSource Datasource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.driverClassName);//用this以区分局部和全局,这里是全局所以用this
        dataSource.setUrl(this.url);
        dataSource.setUsername(this.username);
        dataSource.setPassword(this.password);
        return dataSource;
    }
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

对应的jdbc.properties是

jdbc.driverClassName = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/pinshaoshao?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT%2B8&
jdbc.username = root
jdbc.password = root
  • 1
  • 2
  • 3
  • 4

第二种,写了一个配置属性的对象类JdbcProperties,

@Configuration
@ConfigurationProperties(prefix = "jdbc")//使用此注解必须要get,set方法和@Component或者其子类(如@Configration,@Service...)
public class JdbcProperties {

    private String driverClassName;

    private String url;

    private String username;

    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 getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

又写了一个JdbcConfiguration用来写你的方法,使用的时候将上面这个类注入

(springboot将这个类注入有四种方式):

1、@Autowired注入(注意这种方法要在JdbcConfiguration上加上@EnableConfigurationProperties(JdbcProperties.class),来启用配置属性的对象类JdbcProperties)

//@PropertySource("classpath:jdbc.properties")//classpath(类路径)是指src文件夹下,否则是file路径,可以参看字母哥的配置文件加载顺序
@Configuration//声明一个类是java配置类,相当于一个xml配置文件
//@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfigration {

    //方式一autowired注入

    @Autowired
    private JdbcProperties jdbcProperties;


   @Bean//把方法的返回值注入到spring容器
    public DataSource Datasource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());//用this以区分局部和全局,这里是全局所以用this
        dataSource.setUrl(this.jdbcProperties.getUrl());
        dataSource.setUsername(this.jdbcProperties.getUsername());
        dataSource.setPassword(this.jdbcProperties.getPassword());
        return dataSource;
    }
  
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

2、和第一种差不多。不过换成构造方法注入(注意此种方法也不能少了@EnableConfigurationProperties(JdbcProperties.class),因为这个注解在这里是将JdbcProperties交给ioc当作bean了,不加的话没有这个bean,注入都会失败)

//@PropertySource("classpath:jdbc.properties")//classpath(类路径)是指src文件夹下,否则是file路径,可以参看字母哥的配置文件加载顺序
@Configuration//声明一个类是java配置类,相当于一个xml配置文件
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfigration {
  
   private JdbcProperties jdbcProperties;
    //方式二构造方法注入
   public JdbcConfigration(JdbcProperties jdbcProperties) {
        this.jdbcProperties = jdbcProperties;
    }

   @Bean//把方法的返回值注入到spring容器
    public DataSource Datasource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.jdbcProperties.getDriverClassName());//用this以区分局部和全局,这里是全局所以用this
        dataSource.setUrl(this.jdbcProperties.getUrl());
        dataSource.setUsername(this.jdbcProperties.getUsername());
        dataSource.setPassword(this.jdbcProperties.getPassword());
        return dataSource;
    }
  
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

3、和第一种差不多。不过换成@Bean那个方法的形参注入

//@PropertySource("classpath:jdbc.properties")//classpath(类路径)是指src文件夹下,否则是file路径,可以参看字母哥的配置文件加载顺序
@Configuration//声明一个类是java配置类,相当于一个xml配置文件
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfigration {

   @Bean//把方法的返回值注入到spring容器
    public DataSource Datasource(JdbcProperties jdbcProperties) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(jdbcProperties.getDriverClassName());//用this以区分局部和全局,这里是全局所以用this
        dataSource.setUrl(jdbcProperties.getUrl());
        dataSource.setUsername(jdbcProperties.getUsername());
        dataSource.setPassword(jdbcProperties.getPassword());
        return dataSource;
    }
  
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

4、这种最优雅简洁,我们把JdbcProperties这个类不要了,然后直接在方法上加JdbcConfigration的类的@bean方法上@ConfigurationProperties注解

@Configuration//声明一个类是java配置类,相当于一个xml配置文件

public class JdbcConfigration {

    //方法四(最优雅)也不要JdbcProperties类了,并且将上面的方法改成
    @Bean
    @ConfigurationProperties(prefix = "jdbc")//注意此时该方法的返回值的类对象一定要有set,get方法(如本例中的DataSource,是有getset方法的)
    public DataSource Datasource() {
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource;
    }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/90523
推荐阅读
相关标签
  

闽ICP备14008679号