Spring中@value以及属性注入的学习
1、简单的Java配置
配置文件(jdbc.properties)
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=123
编写一个配置类
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig { @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;
}
} 注解解读
@Configuration: 声明JdbcConfig是一个配置类
@PropertySource: 指定属性文件的路径
@value: 通过@value为属性注入值
@Bean: 通过dataSource()方法声明为一个注册Bean的方法,Spring会自动调用该方法,该方法的返回值会加入到Spring的容器中
然后就可以在任何位置注入DataSource
当配置上属性后便可以注入任何类使用了
@RestController
public class HelloController { @Autowired
private DataSource dataSource;
@Autowired
private JdbcConfig jdbcConfig; @GetMapping("hello")
public String hello() {
System.out.println(jdbcConfig.getDriverClassName()+"=="+jdbcConfig.getUrl());
return "hello, spring boot!" + dataSource;
} }
打印结果

2、改造原有缺陷,SpringBoot推荐的方式
以上方法的注入方式,虽然属性数据注入进去了,但是不够强大,因为他只能注入基本数据类型。
在SpringBoot中,提供了一种新的属性注入方式,支持各种java基本数据类型及复杂数据类型
接下来我们重新创建一个类,用来属性注入
@Data
@ConfigurationProperties(prefix = "jdbc")
public class SpringBootProperty {
private String url;
private String driverClassName;
private String username;
private String password; }
注解解析:
@ConfigurationProperties注解声明当前类为属性读取类
prefix:读取数据文件中,前缀为jdbc的值
在类上定义各个属性,名称必须与属性文件中jdbc.后面部分一致
属性文件是定义在application.yml文件中的
spring:
application:
name: property
server:
port: 8083
jdbc:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test
username: root
password: 123
接下来在要使用的地方通过
@EnableConfigurationProperties(SpringBootProperty.class)来声明要使用SpringBootProperty这个类的对象
@RestController
@EnableConfigurationProperties(SpringBootProperty.class)
public class HelloController { @Autowired
private SpringBootProperty springBootProperty;
@Autowired
private DataSource dataSource;
@Autowired
private JdbcConfig jdbcConfig; @GetMapping("hello")
public String hello() {
System.out.println("SpringBoot推荐的属性注入方式: " + springBootProperty.getDriverClassName() + "==" + springBootProperty.getUrl());
return "hello, spring boot!";
}
}
启动类
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class); }
}
End......
Spring中@value以及属性注入的学习的更多相关文章
- Spring中集合类型属性注入
我们都知道如何去注入普通属性的值,非常简单,那么我们如何去注入开发中常见的集合类型的属性了,别急,往下看. 这里将介绍如何给Map list set Array Properties 这些属性注入值. ...
- 【坑】Spring中抽象父类属性注入,子类调用父类方法使用父类注入属性
运行环境 idea 2017.1.1 spring 3.2.9.RELEASE 需求背景 需要实现一个功能,该功能有2个场景A.B,大同小异 抽象一个抽象基类Base,实现了基本相同的方法BaseMe ...
- spring中bean配置和注入场景分析
bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并 ...
- spring练习,使用Eclipse搭建的Spring开发环境,属性注入通过构造方法方式实现,模拟用户的正常登录。
相关 知识 >>> 相关 练习 >>> 实现要求: 使用Eclipse搭建的Spring开发环境,属性注入通过构造方法方式实现,模拟用户的正常登录.要求如下: 通过 ...
- Ninject中如果在抽象类中使用了属性注入,则属性必须设置为protected或public
Ninject中如果在抽象类中使用了属性注入,则属性必须设置为protected或public 不能使用private,否则无法注入成功,会报null异常
- Spring boot将配置属性注入到bean类中
一.@ConfigurationProperties注解的使用 看配置文件,我的是yaml格式的配置: // file application.yml my: servers: - dev.bar.c ...
- Spring中对象和属性的注入方式
一:Spring的bean管理 1.xml方式 bean实例化三种xml方式实现 第一种 使用类的无参数构造创建,首先类中得有无参构造器(重点) 第二种 使用静态工厂创建 (1)创建静态的方法,返回类 ...
- Spring中如何向 Bean注入系统属性或环境变量
[转自] http://unmi.cc/spring-injection-system-properties-env/ 在 Spring 中为 javabean 注入属性文件中的属性值一般人都知道的, ...
- Spring中Ioc容器的注入方式
1 通过setter方法注入 bean类: package com.test; public class UserServiceImplement implements IUserService { ...
随机推荐
- WIN10从2016.11开始就强制驱动必须要求经过WHQL认证,而2015的win10就没有问题
http://www.whqlchina.com/whql-news/whql-following/ https://www.zhihu.com/question/45586031 https://a ...
- SimpleMembershipProvider 的 MySql 实现
认 证我一直用的是微软的 Membership 体系,看 MySql 也实现了对应的 Provider,在新建立了一个 MVC4 项目后,把 Provider 一改就直接启动,然后就出错了.异常是“T ...
- ASP.NET MVC5快速入门--MyFirstWeb并发布到Windows Azure上
博主刚刚学习ASP.NET MVC5,看着微软的文档一点点学,就把FirstWeb的建立展示一下下啦,本次建立一个带个人身份验证的例子(即有注册登录机制的动态网页),开始,啦啦啦~~ 新建一个项目,选 ...
- 很幽默的讲解六种Socket IO模型 Delphi版本(自己Select查看,WM_SOCKET消息通知,WSAEventSelect自动收取,Overlapped I/O 事件通知模型,Overlapped I/O 完成例程模型,IOCP模型机器人)
很幽默的讲解六种Socket IO模型(转)本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教. 一:select模型 二:WSAAsyncSel ...
- CheckSynchronize实现的不必要的复杂
在system.classes单元中,CheckSynchronize在ThreadLock上持续调用TMonitor的Exit和Enter以保护SyncList. 因为代码做的第一件事是换出Sync ...
- QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)
QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioBu ...
- Linux基础(二)
网卡的启动与关闭 ipup ens33 启动网卡 ifdown 关闭网卡 普通用户没有该权限 root用户,管理员,普通用户的权限 root 至高无上的 root用户所在的组是root组 管理员 ...
- shell日期整理
date 当前日期+时间 # 日期格式化:date+"" - date +"%Y%m%d" 不带横杠分隔符的日期20160107 date +"%Y% ...
- Hadoop 三剑客之 —— 集群资源管理器 YARN
一.hadoop yarn 简介 二.YARN架构 1. ResourceManager 2. NodeManager 3. ApplicationMa ...
- GIS热力图制作与位置大数据分析
最近有很多朋友咨询位置数据.热力图等等东西,我一一进行了解答,但是个人精力实在有限,特写一个博客进行详细技术说明,其实这个东西位置数据.百度地图POI.高德地图POI等数据爬取.存储都较为简单,热力图 ...