博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot属性注入的几种方式
阅读量:4181 次
发布时间:2019-05-26

本文共 5335 字,大约阅读时间需要 17 分钟。

jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/testjdbc.username=rootjdbc.password=root

一、简单暴力用value

package com.xiaobu.config;import com.alibaba.druid.pool.DruidDataSource;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import javax.sql.DataSource;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2021/4/27 21:19 * @description   使用spring中的value注解对每个属性进行注入,用bean注解将返回值添加到容器中 */@Configuration@PropertySource("classpath:jdbc.properties")public class JdbcConfiguration {
@Value("${jdbc.url}") String url; @Value("${jdbc.driverClassName}") String driverClassName; @Value("${jdbc.username}") String username; @Value("${jdbc.password}") String password; @Bean public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(url); dataSource.setDriverClassName(driverClassName); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; }}

JdbcProperties

@Data@ConfigurationProperties(prefix = "jdbc")   //这里需要定义出在application文件中定义属性值得前缀信息public class JdbcProperties {
private String url; private String driverClassName; private String username; private String password;}

二、属性注入 (最常用的方式)

package com.xiaobu.config;import com.alibaba.druid.pool.DruidDataSource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2021/4/27 21:19 * @description   属性注入 (最常用的方式) */@Configuration//@PropertySource("classpath:jdbc.properties") //配不配置无所谓@EnableConfigurationProperties(JdbcProperties.class)public class AttributeJdbcConfiguration {
@Autowired private JdbcProperties jdbcProperties; @Bean public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(jdbcProperties.getUrl()); dataSource.setDriverClassName(jdbcProperties.getDriverClassName()); dataSource.setUsername(jdbcProperties.getUsername()); dataSource.setPassword(jdbcProperties.getPassword()); return dataSource; }}

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

package com.xiaobu.config;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Configuration;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2021/4/27 21:19 * @description   构造方法注入  这里不需要添加@Autowired注解,也不需要在添加@Bean注解,在要使用数据源的类,使用他的构造方法进行注入 */@Configuration//@PropertySource("classpath:jdbc.properties") //配不配置无所谓@EnableConfigurationProperties(JdbcProperties.class)public class ConstructionMethodJdbcConfiguration {
//@Autowired private JdbcProperties jdbcProperties; public ConstructionMethodJdbcConfiguration(JdbcProperties jdbcProperties) {
this.jdbcProperties = jdbcProperties; }}

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

package com.xiaobu.config;import com.alibaba.druid.pool.DruidDataSource;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2021/4/27 21:19 * @description   通过bean方法的形参进行注入  在方法上的形参上进行定义要注入的数据源,方法对数据源初始化处理后,通过bean注解将方法的返回值注入到容器中 */@Configuration//@PropertySource("classpath:jdbc.properties") //配不配置无所谓@EnableConfigurationProperties(JdbcProperties.class)public class FormalParametersJdbcConfiguration {
@Bean public DataSource dataSource(JdbcProperties jdbcProperties) {
DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(jdbcProperties.getUrl()); dataSource.setDriverClassName(jdbcProperties.getDriverClassName()); dataSource.setUsername(jdbcProperties.getUsername()); dataSource.setPassword(jdbcProperties.getPassword()); return dataSource; }}

五、 最优雅的注入

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

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

package com.xiaobu.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;/** * @author xiaobu * @version JDK1.8.0_171 * @date on  2021/4/27 21:19 * @description 直接将配置注解添加到方法上, 这是因为DataSource内部也是有set方法.进行自动注入. * 但是,也是需要有前提的:必须保证注入的有set方法,并且set方法的名字和配制文件中的属性名需要是一样的.这里使用的是datasource中内部的set方法 */@Configuration//@PropertySource("classpath:jdbc.properties") //配不配置无所谓public class ElegantJdbcConfiguration {
@Bean @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource() {
return new DruidDataSource(); }}

参考:

转载地址:http://pkgai.baihongyu.com/

你可能感兴趣的文章
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Android 的source (需安装 git repo)
查看>>
Ubuntu Navicat for MySQL安装以及破解方案
查看>>
java多线程中的join方法详解
查看>>
在C++中如何实现模板函数的外部调用
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>