SpringBoot的属性注入

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

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

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

代码:

@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

2)在JdbcConfiguration中使用这个属性:

  • 通过@EnableConfigurationProperties(JdbcProperties.class)来声明要使用JdbcProperties这个类的对象

  • 然后你可以通过以下方式在JdbcConfiguration类中注入JdbcProperties:

    1. @Autowired注入

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

构造函数注入

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

@Bean方法的参数注入

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

本例中,我们采用第三种方式。

大家会觉得这种方式似乎更麻烦了,事实上这种方式有更强大的功能,也是SpringBoot推荐的注入方式。两者对比关系:

优势:

  • Relaxed binding:松散绑定

    • 不严格要求属性文件中的属性名与成员变量名一致。支持驼峰,中划线,下划线等等转换,甚至支持对象引导。比如:user.friend.name:代表的是user对象中的friend属性中的name属性,显然friend也是对象。@value注解就难以完成这样的注入方式。

    • meta-data support:元数据支持,帮助IDE生成属性提示(写开源框架会用到)。

更优雅的注入

事实上,如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中。而是直接在需要的地方声明即可:

@Configuration
public class JdbcConfiguration {@Bean// 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中@ConfigurationProperties(prefix = "jdbc")public DataSource dataSource() {DruidDataSource dataSource = new DruidDataSource();return dataSource;}
}

我们直接把@ConfigurationProperties(prefix = "jdbc")声明在需要使用的@Bean的方法上,然后SpringBoot就会自动调用这个Bean(此处是DataSource)的set方法,然后完成注入。使用的前提是:该类必须有对应属性的set方法!

springboot属性注入相关推荐

  1. springboot属性注入的四种方法

    springBoot属性注入的四种方法: 以注入jdbc数据源为例 1.首先在resources下面创建application.properties文件,并添加jdbc数据源属性 jdbc.drive ...

  2. springboot属性注入的四种方式

    springboot属性注入 1.前言:介绍以前spring中配置 java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有: @Configuration:声明一个类作为 ...

  3. SpringBoot 属性注入的四种方式

    一.Spring的属性注入方式(以前的方式) java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有: @Configuration:声明一个类作为配置类,代替xml文件 ...

  4. springboot属性注入转化为对象

    第一种方式:用spel表达式解析 @Value("#{ T(com.alibaba.fastjson.JSON).parseObject('${train.purchase}')}" ...

  5. druiddatasource配置_Springboot属性注入 Java配置和Value配置

    今天我们正式进入了SpringBoot入门实战系列的课程,第二个部分SpringBoot配置和日志管理,本期课程将会分享:1.springboot属性注入 - @Value(推荐);2.Springb ...

  6. springboot @ConfigurationProperties注入属性流程

    一.编写实例,只要加上ConfigurationProperties注解,就会从当前springboot的Environment中读取配置属笥.Environment包括bootStrap,appli ...

  7. 【SpringBoot 】 组件管理 + 属性注入

    组件管理 + 属性注入 组件管理 @Component 管理单个组件 @Configuration + @Bean 管理多个组件 属性注入 基本属性注入 @Value 对象方式注入 @Configur ...

  8. Spring——Bean管理-xml方式进行属性注入

    目录 一.xml方式创建对象 二.xml方式注入属性 第①种方式注入:set方法注入 第②种方式注入:有参构造函数注入 constructor-arg:通过构造函数注入 用name标签属性: 不按照顺 ...

  9. SpringBoot中注入RedisTemplate泛型异常

    SpringBoot中注入RedisTemplate泛型异常 报错如下: org.springframework.beans.factory.UnsatisfiedDependencyExceptio ...

最新文章

  1. ERROR: Unable to load class 'org.gradle.api.internal.component.Usage'.
  2. python 时间字符串和时间戳之间的转换
  3. 四种参数传递的形式——URL,超链接,js,form表单
  4. java sftp 实例_JAVA实现SFTP的实例
  5. 精进:如何成为一个很厉害的人---书摘(转)
  6. Android Studio使用心得
  7. Proteus仿真单片机:PIC18单片机的仿真
  8. 从39个kaggle竞赛中总结出来的图像分割的Tips和Tricks
  9. python学习笔记7--面向对象进阶,异常处理,socket编程初识
  10. 统一帐号体系业务及模型
  11. 拓端tecdat|R语言神经网络模型预测车辆数量时间序列
  12. Modscan32使用注意事项
  13. 内存映射(Memory Map)
  14. (转)简体繁体转换代码(Big5-GB | GBK简体-GBK繁体)
  15. OMNeT学习之TicToc2-7详解
  16. 软件系统分析模型文档
  17. 算法题_寻找最大连通区域
  18. 《自控力》 第一章读书笔记
  19. 守恒定律、连续性方程和玻印亭矢量
  20. windows 2008 R2 64位系统杀毒软件

热门文章

  1. JAVAWEB 一一 SpringMVC(注解)
  2. spark 存储机制详解
  3. C#环境下使用Windows消息传递字符串数据的研究
  4. PHP判断是否有Get参数的方法
  5. ie6常见css bug
  6. android自动化测试工具之monkey
  7. mysql-5.6.17-win32的安装?
  8. Java语言学校的危险性(译文)
  9. 使用Python的twisted和socket模块实现端口的负载分发
  10. 打开MSN提示Windows Live Communication Platform遇到问题需要关闭错误的解决方法