弹簧特性

1.概述

本教程将展示如何通过XML或Java配置在Spring中设置和使用属性

在Spring 3.1之前 ,将新的属性文件添加到Spring并使用属性值并不像它那样灵活和健壮。 从Spring 3.1开始 ,新的EnvironmentPropertySource抽象大大简化了此过程。

2.通过XML名称空间注册属性

使用XML,可以通过以下命名空间元素使Spring访问新的属性文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"><context:property-placeholder location="classpath:foo.properties" /></beans>

foo.properties文件应放在/ src / main / resources下,以便在运行时可在类路径上使用。

多个

如果在Spring上下文中存在多个<property-placeholder>元素 ,则应遵循一些最佳实践:

  • 需要指定order属性来固定Spring处理这些订单的顺序
  • 所有属性占位符减去最后一个(最高顺序 )应具有ignore-unresolvable =“ true”,以允许解析机制在上下文中传递给其他对象而不会引发异常

3.通过Java注释注册属性

Spring 3.1还引入了新的@PropertySource批注 ,作为将属性源添加到环境的便捷机制。 该注释将与基于Java的配置和@Configuration注释一起使用:

@Configuration
@PropertySource("classpath:foo.properties")
public class PropertiesWithJavaConfig {@Beanpublic static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {return new PropertySourcesPlaceholderConfigurer();}
}

与使用XML名称空间元素相反,Java @PropertySource批注不会自动向Spring注册PropertySourcesPlaceholderConfigurer 。 相反,必须在配置中显式定义Bean,以使属性解析机制正常工作。 此意外行为背后的原因是设计使然,并对此问题进行了记录 。

4.使用属性

在Spring 3.1中添加的较旧的PropertyPlaceholderConfigurer和新的PropertySourcesPlaceholderConfigurer都可以在bean定义属性值和@Value批注中解析$ {…}占位符

例如,要使用@Value注释注入属性:

@Value( "${jdbc.url}" )
private String jdbcUrl;

还可以指定属性的默认

@Value( "${jdbc.url:aDefaultUrl}" )
private String jdbcUrl;

在Spring XML配置中使用属性:

<bean id="dataSource"><property name="url" value="${jdbc.url}" />
</bean>

最后,通过新的环境API获取属性:

@Autowired
private Environment env;
...
dataSource.setUrl(env.getProperty("jdbc.url"));

一个非常重要的警告是,使用<property-placeholder> 不会将属性公开给Spring Environment –这意味着检索这样的值将不起作用–它将返回null

env.getProperty("key.something")

4.1属性搜索优先级

默认情况下,在Spring 3.1中,本地属性在所有环境属性源(包括属性文件)之后排在最后。 可以通过PropertySourcesPlaceholderConfigurerlocalOverride属性来覆盖此行为,可以将其设置为true以允许本地属性覆盖文件属性。

在Spring 3.0及更低版本中,旧的PropertyPlaceholderConfigurer也尝试在手动定义的源以及系统属性中查找属性。 还可以通过配置程序的systemPropertiesMode属性自定义查找优先级:

  • 从不 –从不检查系统属性
  • 备用 (默认)–检查系统属性,如果在指定的属性文件中无法解析
  • 覆盖 –在尝试指定的属性文件之前,请先检查系统属性。 这允许系统属性覆盖任何其他属性源。

最后,请注意,如果在通过@PropertySource定义的两个或多个文件中定义了属性,则最后一个定义将获胜并覆盖之前的定义 。 这使得确切的属性值难以预测,因此,如果覆盖很重要,则可以使用PropertySource API。

5.幕后–Spring配置

5.1。 在Spring 3.1之前

Spring 3.1引入了使用注释定义属性源的便捷选项–但在此之前,必须使用XML Configuration。

<context:property-placeholder> XML元素自动在Spring上下文中注册一个新的PropertyPlaceholderConfigurer bean 。 为了向后兼容,如果XSD架构尚未升级为指向新的3.1 XSD版本,则在Spring 3.1中也是如此。

5.2。 在Spring 3.1之后

从Spring 3.1开始,XML <context:property-placeholder>将不再注册旧的PropertyPlaceholderConfigurer,而是新注册的PropertySourcesPlaceholderConfigurer 。 创建此替换类是​​为了更灵活并更好地与新引入的Environment and PropertySource机制进行交互。

对于使用Spring 3.1或更高版本的应用程序,应将其视为标准。

6.在Spring 3.0中使用Raw Bean进行配置–

除了将属性放入Spring(注释和XML名称空间)的便捷方法之外,还可以手动定义和注册属性配置bean。 使用PropertyPlaceholderConfigurer使我们可以完全控制配置,但缺点是过于冗长,并且在大多数情况下是不必要的。

6.1。 Java配置

@Bean
public static PropertyPlaceholderConfigurer properties(){PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();Resource[] resources = new ClassPathResource[ ]{ new ClassPathResource( "foo.properties" ) };ppc.setLocations( resources );ppc.setIgnoreUnresolvablePlaceholders( true );return ppc;
}

6.2。 XML配置

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath:foo.properties</value></list></property><property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

7.在Spring 3.1中使用Raw Bean进行配置–

同样,在Spring 3.1中,也可以手动配置新的PropertySourcesPlaceholderConfigurer

7.1。 Java配置

@Bean
public static PropertySourcesPlaceholderConfigurer properties(){PropertySourcesPlaceholderConfigurer pspc =new PropertySourcesPlaceholderConfigurer();Resource[] resources = new ClassPathResource[ ]{ new ClassPathResource( "foo.properties" ) };pspc.setLocations( resources );pspc.setIgnoreUnresolvablePlaceholders( true );return pspc;
}

7.2。 XML配置

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"><property name="location"><list><value>classpath:foo.properties</value></list></property><property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>

8.结论

本文展示了几个在Spring中使用属性和属性文件的示例 ,并讨论了旧的Spring 3.0选项以及Spring 3.1中引入的对属性的新支持。

可以在github项目中找到所有注册属性文件和使用属性值的示例的实现–这是一个基于Eclipse的项目,因此应该很容易直接导入和运行。

参考:来自bakgung博客的JCG合作伙伴 Eugen Paraschiv 提供的Spring属性 。

翻译自: https://www.javacodegeeks.com/2012/02/properties-with-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php-cgi cpu很高,php-cgi占用cpu资源过高的解决方法

转的网上的&#xff0c;不过对PHP-CGI菜鸟的人&#xff0c;还是有点帮助的。1. 一些php的扩展与php版本兼容存在问题&#xff0c;实践证明 eAccelerater与某些php版本兼容存在问题&#xff0c;具体表现时启动php-cgi进程后&#xff0c;运行10多分钟&#xff0c;奇慢无比&#x…

《做中学》读后有感

《做中学》读后有感 最近读了娄老师的“做中学”系列文章&#xff0c;有很大感触&#xff0c;今天想着重谈一谈我在学习方面收到的启发。 如何成功get一项技能 如果问到“如何开始get一项技能”&#xff0c;我想我们应该是最有发言权的一代。从小就被爸爸妈妈引导着参加各种课外…

多表之间关联查询

内连接 jion on 自连接 本表进行内连接的查询形式 外链接&#xff1a; 左链接 写法&#xff1a;select 字段 from 表1 t left join 表2 s on t.字段1 s.字段1 where 条件 或者 作用&#xff1a;保证左边的表的数据全部显示&#xff0c;包括空的 右链接 写法 &#xff1a;sele…

php文件夹0777,PHP代码mkdir(‘images’,’0777′)创建一个具有411权限的文件夹!为什么?...

我发誓这是昨天的工作.然而,现在下面的代码破坏文件夹没有问题,但创建一个具有411权限的新文件夹应该是777.我的代码昨天这样做.这样做的目的是压缩文件夹,传递文件夹,删除图像,然后为图像创建新目录.有人能告诉我我做错了什么或我应该做什么&#xff1f;谢谢function delete_d…

调查HashDoS问题

近一个月前&#xff0c;我就如何在不与供应商互动的情况下临时解决 28C3上出现的HashDoS问题或其他代码缺陷发表了一些想法。 现在是时候更深入地研究复杂性攻击并查看来源了。 我完全假设java.util.HashMap和java.util.Hashtable是受此攻击影响的最常用的Java数据结构&#xf…

Linq 和 EF Contains示例

List<int> unitIDListnew List<int>(); //此处添加int元素 var query DB.ElecConsumers.Where(c > unitIDList.Contains(c.ParentUnitID)); //EF方式 var query1 (from c in DB.ElecConsumers where unitIDList.Contains(c.ParentUnitID ) select c); //Linq方…

date 显示或设置系统时间和日期

显示或设置系统时间和日期 date [options] [format] date [options] [new date] date用来显示系统的时间和日期&#xff0c;超级用户可以使用date来更改系统时钟 选项 %H 小时&#xff0c;24小时制&#xff08;00~23&#xff09; %I 小时&#xff0c;12小时制&#xff…

Java 7:WatchService

在Java 7的所有新功能中&#xff0c;更有趣的是WatchService&#xff0c;它增加了监视目录更改的功能。 WatchService直接映射到本机文件事件通知机制&#xff08;如果有&#xff09;。 如果本机事件通知机制不可用&#xff0c;则默认实现将使用轮询。 结果&#xff0c;响应性&…

做一件事情的3个关键指标:兴趣、能力和回报

最近突然有了一点新的感悟&#xff0c;在原有的认识基础之上。关于找工作&#xff0c;大家说的最多的&#xff0c;根据自己的“兴趣”和“能力”。我觉得这是不够的&#xff0c;还应该加上一个“回报”。兴趣&#xff1a;对一件事有没有愿望去尝试&#xff0c;侧重“好奇心”。…

iOS应用内支付(IAP)详解

在iOS开发中如果涉及到虚拟物品的购买&#xff0c;就需要使用IAP服务&#xff0c;我们今天来看看如何实现。 在实现代码之前我们先做一些准备工作&#xff0c;一步步来看。 1、IAP流程 IAP流程分为两种&#xff0c;一种是直接使用Apple的服务器进行购买和验证&#xff0c;另一种…

vagrant box php,vagrant box php开发环境配置 -- nginx

centos7.3 直接用yum安装nginx的版本是1.10.2&#xff0c;当前的最新稳定版是1.10.3&#xff0c;暂时不更新&#xff0c;直接安装yum安装nginxsudo yum install -y nginx测试nginx -t启动sudo service nginx startps -ef|grep nginxcurl -i localhost在virtualbox设置网络的端口…

使用ASM 4处理Java类文件–第二部分:Tree API

什么是ASM树API&#xff1a; ASM树API是ASM的一部分&#xff0c;可让您创建/修改内存中的类。 该类被视为信息树。 像整个类一样&#xff0c;它是ClassNode的实例&#xff0c;其中包含FieldNode对象列表&#xff0c;MethodNode对象列表等。本文假设读者已经在这里阅读了第一部分…

php 去除 html 属性,用PHP 去掉所有html标签里的部分属性

用PHP 去掉所有html标签里的部分属性http://zhidao.baidu.com/question/418471924.html用PHP 去掉所有html标签里的部分属性 tppabsset_time_limit(0);function view_dir($dir){$dpopendir($dir); //打开目录句柄//echo "".$dir."";$path2;while ($file r…

在Windows上安装Elasticsearch 5.0

在windows上安装Elasticsearch Elasticsearch可以使用.zip软件包安装在Windows上。 elasticsearch-service.bat命令&#xff0c;它将设置Elasticsearch作为服务运行。 Elasticsearch的最新稳定版在Download Elasticsearch下载&#xff0c;其他的版本在Past Releases page下载。…

Java EE 6示例– Galleria

您是否一直想知道在哪里可以找到使用Java EE 6构建的良好端到端示例&#xff1f; 我有。 您在网上找到的大多数东西都是非常基础的&#xff0c;不能解决现实世界中的问题。 Java EE 6教程就是这样。 所有其他内容&#xff0c;例如Adam Bien所发表的大多数内容&#xff0c;都是范…

二维有限体积 matlab,二维有限体积法计算热传导及源码.pdf

二维有限体积法计算热传导及源码//#include "stdafx.h"#include #include #include #include #include using namespace std;#define q 500#define k 1000void main (){ //input the value you want:double L,dx,dy,T,Ax,Ay,d;int m,n,i,j,kk,mm ;//char str1[20];ch…

ubuntu与win10互换硬盘

实例&#xff1a;将sdb上的ubuntu转移至sda&#xff0c;将sda上的win转移至sdb1. 备份资料2. 制作老毛桃PE盘3. 格式化sda4. dd if/dev/sdb of/dev/sda ,将sdb克隆到sda上5. 利用Linux live cd修复grub2&#xff08;BIOS不会认GPT分区&#xff09; sudo grub-install /dev/sda …

如何在Jetty中使用SPDY

SPDY是Google提出的一种新协议&#xff0c;是针对网络的新协议。 SPDY与HTTP兼容&#xff0c;但尝试通过压缩&#xff0c;多路复用和优先级降低网页负载。准确地说&#xff0c;快速的目标是&#xff1a;&#xff08; http://dev.chromium.org/spdy/spdy-whitepaper &#xff09…

虐杀外星人java,逆天游戏《毁灭全人类2》登PS4 外星人疯狂虐杀地球人

逆天游戏《毁灭全人类2》登PS4 外星人疯狂虐杀地球人2016-10-17 10:45:58来源&#xff1a;游戏下载编辑&#xff1a;小年青评论(0)广大的小伙伴都有看过许多外星人企图入侵毁灭地球的电影&#xff0c;已此为题材而开发的游戏也不在少数。近日泛欧洲游戏信息组织又为一款该种题材…

电脑快捷键大全

最常用的快捷键F5------刷新 DELETE-----删除 TAB----改变焦点CTRLC-----复制 CTRLX-----剪切 CTRLV----粘贴CTRLA-----全选 CTRLZ-----撤销 CTRLS-----保存 ALTF4-----关闭 CTRLY-----恢复 ALTTAB-----切换CTRLF5---强制刷新…