springboot属性注入的四种方式

原文地址:https://blog.csdn.net/Ru_yin_hai/article/details/98939615

10.springboot属性注入
10.1通过以前spring中配置


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

  • @Configuration:声明一个类作为配置类,代替xml文件
  • @Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签
  • @Value:属性注入
  • @PropertySource:指定外部属性文件。在类上添加@PropertySource("classpath:/jdbc.properties")

我们接下来用以前配置来尝试实现连接池配置

10.1.1 引入数据源连接依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
     <version>1.1.6</version>
</dependency>

10.1.2添加jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

10.1.3配置数据源

创建JdbcConfiguration类:  使用spring中的value注解对每个属性进行注入,用bean注解将返回值添加到容器中

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(url);
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
}

解读:

@Configuration:声明JdbcConfiguration是一个配置类。
@PropertySource:指定属性文件的路径是:classpath:jdbc.properties
通过@Value为属性注入值。
通过@Bean将 dataSource()方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。相当于以前的bean标签
然后就可以在任意位置通过@Autowired注入DataSource了!

 
springboot对上面的配置进行了优化

10.2 SpringBoot注入方式1: 属性注入 (最常用的方式)

在上面的案例中,我们实验了java配置方式。不过属性注入使用的是@Value注解。这种方式虽然可行,但是不够强大,因为它只能注入基本类型值。

在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂类型的注入。

10.2.1新建JdbcProperties,用来进行属性注入:

@ConfigurationProperties(prefix = "jdbc")   //这里需要定义出在application文件中定义属性值得前缀信息

public class JdbcProperties {

    private String url;

    private String driverClassName;

    private String username;

    private String password;

    // ... 略

    // getters 和 setters

}

这里面就不需要在设置value属性,他是通过set方法进行资源自动注入的.

注意:set方法中的属性名的值要和资源文件中属性文件中值名字保持一致

10.2.2在application.properties(yml)中定义配置信息

Springboot在启动时并不会加载其他配置文件,它只加载默认的配置文件application.properties(yml),因此,将配置信息添加到这里,通过前缀进行区分,进行引用

12.2.3 引用数据源 使用@EnableConfigurationProperties(引用属性类的字节码)引用配置信息

10.2 springboot注入方式2: 构造方法注入

之前的操作与注入方式1一样,只是这里注入的方式不一样

这里不需要添加@Autowired注解,也不需要在添加@Bean注解,在要使用数据源的类,使用他的构造方法进行注入

 

10.3 springboot注入方式3: 通过bean方法的形参进行注入

在方法上的形参上进行定义要注入的数据源,方法对数据源初始化处理后,通过bean注解将方法的返回值注入到容器中

 

10.4 spring注入方式4: 最优雅的注入  

不需要jdbcProperties

直接将配置注解添加到方法上,这是因为DataSource内部也是有set方法.进行自动注入.

但是,也是需要有前提的:必须保证注入的有set方法,并且set方法的名字和配制文件中的属性名需要是一样的.这里使用的是datasource中内部的set方法

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,属性注入可以通过不同的方式实现。一种常见的方式是使用`@ConfigurationProperties`注解。通过将该注解应用于一个类上,可以将`application.properties`或`application.yml`文件中定义的属性注入到Java类中。这种注入是通过Java类属性的setter方法进行的。 另外一种方式是通过在`@Bean`方法上使用`@ConfigurationProperties`注解。在这种情况下,Spring Boot会自动调用该`@Bean`方法,并将相关属性通过setter方法注入到对应的Bean中。需要注意的是,被注入属性的类必须具有对应属性的setter方法。 为了观察被注入属性,你可以通过访问`http://localhost:8080/source/show`来查看。这个URL将展示被注入属性信息。另外,还可以使用`@ConfigurationProperties`注解进行批量注入属性,以方便地注入多个属性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringBoot属性注入](https://blog.csdn.net/Nicholas_GUB/article/details/120997989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [SpringBoot 属性注入](https://blog.csdn.net/2301_77025309/article/details/130994152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值