SpringInAction--Bean参数的自动注入
前面我已经学过了,将一个bean引用注入到另一个bean的属性或构造器参数中,这边指的是将一个对象与另一个对象进行关联。
我们学过的方法是在创建的时候根据new对象的时候,注入参数,如下:
@Bean
public CompactDisc randomCd() {
int choice = (int) Math.floor(Math.random() * 4);
switch (choice) {
case 0:
return new RandomCd("dangNianQing");
case 1:
return new RandomCd("qianNvYouHun");
case 2:
return new RandomCd("wo");
default:
return new RandomCd("chenMoShiJing");
}
}
也可以在xml中配置的时候,注入:
<bean id="randomCd" class="com.bean.xml.RandomCd">
<constructor-arg index="0" value="当年情"/>
<constructor-arg index="1" value="张国荣"/>
</bean>
这些方法属于的值属于 硬编码值。
有时候硬编码是可以的,但有的时候,我们可能会希望避免硬编码值,而是想让这些值在运行时再确定。为了实现这些功能,Spring提供了两种在运行时求值的方式:
- 属性占位符(Property placeholder)。
- Spring表达式语言(SpEL)。
先看第一种的方法,属性占位符,主要是使用@PropertySource注解和Environment
@Configuration
@PropertySource(value = "/com/bean/java/cd.properties")
public class CDPlayerConfig { @Autowired
Environment environment; @Bean
public CompactDisc randomCd() { int choice = (int) Math.floor(Math.random() * 4);
switch (choice) {
case 0:
return new RandomCd(environment.getProperty("cd.dnq"));
case 1:
return new RandomCd(environment.getProperty("cd.qnyh"));
case 2:
return new RandomCd(environment.getProperty("cd.w"));
default:
return new RandomCd(environment.getProperty("cd.cmsj"));
}
} }
cd.properties内容为:
cd.dnq= dnq
cd.qnyh = qnyh
cd.w = w
cd.cmsj = cmsj
cd.properties在运行的时候会被加载到Spring的Environment 通过从Environment检索可以得到文件中的属性值,取值的方式有以下四种种:
- String getProperty(String var1);
- String getProperty(String var1, String var2);
- <T> T getProperty(String var1, Class<T> var2);
- <T> T getProperty(String var1, Class<T> var2, T var3);
第一个就是上面所用的key-value 键值对对于的key
第二个是指当指定key,没有特定的value的时候,后面的值即是为默认值
第三个跟第四种相似,只不过他特定了一个类型,方便你用吗,无需取完之后再去转换
当然了Environment除了这些属性,还有:
- String[] getActiveProfiles():返回激活profile名称的数组;
- String[] getDefaultProfiles():返回默认profile名称的数组;
- boolean acceptsProfiles(String... profiles):如果environment支持给定profile的话,就返回true。
上面的是java配置解析的 ,我们也来看看如何用xml跟自动扫描的方式来解析占位符
public CompactDisc randomCd(@Value("${cd.dnq}") String str) {
System.out.println(str);
}
xml方式
<bean id="randomCd" class="com.bean.xml.RandomCd">
<constructor-arg index="0" value="${cd.dnq}"/>
<constructor-arg index="1" value="张国荣"/>
</bean>
当然使用这些方法是要有前提的,需要配置PropertySourcesPlaceholderConfigurer,因为它能够基于Spring Environment及其属性源来解析占位符。
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
return new PropertySourcesPlaceholderConfigurer();
}
xml中需要添加:
<context:property-placeholder />
让我们再来看下第二种方法:Spring表达式语言进行装配。SpEL表达式要放到“#{ ... }”之中,这与属性占位符有些类似,属性占位符需要放到“${ ... }”之中
SpEL的表达式学问还是很深的,我这里就学习点皮毛:
比如表达式为一个常量
#{3}
为一个小小的函数(T为类型)
#{T(System).currentTimeMillis()}
也可以引起其他bean的属性,这里的dangNianQing为一个bean,可以获得他的title属性和方法
#{dangNianQing.title}
#{dangNianQing.play()}
还可以通过systemProperties对象引用系统属性:
#{SystemProperties['cd.dnq']}
就先介绍这一点,等学的更多的时候,在贴上来。。。
以上就是Bean自动注入的学习笔记,如有错,欢迎指出,谢谢~
SpringInAction--Bean参数的自动注入的更多相关文章
- Spring容器是如何实现 Bean 自动注入(xml)
入口web.xml web.xml 配置文件 <!-- Spring Config --> <listener> <listener-class>org.sprin ...
- spring的两种属性注入方式setter注入和构造器注入或者自动注入
1.这里的属性自动注入,与注解配置bean是两回事.这里的自动注入,指的是bean属性的自动注入. bean属性自动注入,包括byNAme和ByType两码事. 2.所有的applicationCon ...
- spring bean自动注入
使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...
- 解决Spring+Quartz无法自动注入bean问题
问题 我们有时需要执行一些定时任务(如数据批处理),比较常用的技术框架有Spring + Quartz中.无奈此方式有个问题:Spring Bean无法自动注入. 环境:Spring3.2.2 + Q ...
- 小白日记46:kali渗透测试之Web渗透-SqlMap自动注入(四)-sqlmap参数详解- Enumeration,Brute force,UDF injection,File system,OS,Windows Registry,General,Miscellaneous
sqlmap自动注入 Enumeration[数据枚举] --privileges -U username[CU 当前账号] -D dvwa -T users -C user --columns [ ...
- 小白日记45:kali渗透测试之Web渗透-SqlMap自动注入(三)-sqlmap参数详解-Optimization,Injection,Detection,Techniques,Fingerprint
sqlmap自动注入 Optimization [优化性能参数,可提高效率] -o:指定前三个参数(--predict-output.--keep-alive.--null-connection) - ...
- 小白日记44:kali渗透测试之Web渗透-SqlMap自动注入(二)-sqlmap参数详解REQUEST
Sqlmap自动注入(二) Request ################################################### #inurl:.php?id= 1. 数据段:--d ...
- 小白日记43:kali渗透测试之Web渗透-SqlMap自动注入(一)-sqlmap参数详解TARGET
SqlMap自动注入(一) sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞[动态页面中get/post参数.cookie.HTTP头].它由Python语言开发 ...
- spring mvc 3.1的自动注入参数遇到的问题
在网上下载了xheditor作为页面的编辑器,编辑内容后post到后台保存,后台方法用spring mvc的自动注入的方式接收参数. 这种方式在各个浏览器下运行良好,但是在ie11下发现,从word. ...
随机推荐
- 在python3下对数据分块(8x8大小)使用OpenCV的离散余弦变换DCT
在MATLAB中有blkproc (blockproc)对数据处理, 在python下没找到对应的Function, 这里利用numpy 的split(hsplit和vsplit) 对数据分块处理成8 ...
- Stitching模块中对特征提取的封装解析(以ORB特性为例)
titching模块中对特征提取的封装解析(以ORB特性为例) OpenCV中Stitching模块(图像拼接模块)的拼接过程可以用PipeLine来进行描述,是一个比较复杂的过程.在这个过程 ...
- 20145301 实验三 "敏捷开发与XP实践"
20145301 实验三 "敏捷开发与XP实践" 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.22 实验名称:敏捷开发与XP实践 一.实验 ...
- 20145312 《Java程序设计》第2周学习总结
20145312 <Java程序设计>第2周学习总结 教材学习内容总结 1.1类型.变量与运算符 1.1.1类型 1.基本类型 整数:short(2字节).long(8字节).int(4字 ...
- 20145329《Java程序设计》第八周学习总结
教材学习内容总结 日志 1.java.util.logging包提供了日志功能相关类与接口. 2.使用日志的起点是Logger类,Longer类的构造函数标示为protected,不同包的类药取得Lo ...
- IDEA 安装mybatis 插件 可以通过mapper定位到xml
在使用IDEA的时候 ,通过mapper类定位到 xml文件是让人很头疼的问题! 无意中发现了这个插件!可以通过类方法直接定位到xml中!比较强大!哈哈! 这玩意好像是付费的! 不过不破解也能用! 哈 ...
- Ubuntu16.04安装搜狗拼音输入法(中文输入法)[转]
本文转载自:https://www.cnblogs.com/darklights/p/7722861.html 虽然网上有很多教程,但是我觉得我的很适合那些真正的小白... 1.下载文件 由于我要给多 ...
- 上采样和PixelShuffle(转)
有些地方还没看懂, mark一下 文章来源: https://blog.csdn.net/g11d111/article/details/82855946 去年曾经使用过FCN(全卷积神经网络)及其派 ...
- [Network Architecture]Xception 论文笔记(转)
文章来源 论文:Xception: Deep Learning with Depthwise Separable Convolutions 论文链接:https://arxiv.org/abs/161 ...
- DataReader 连接数据库完整过程和代码(Sql Server)
数据库名叫:Bu 有个表:A 里面有一列:ID 需要引用 using System.Data.SqlClient; 代码部分如下: SqlConnection sqlCon=new SqlConnec ...