如何在@spring property属性中给属性附初始值

spring boot 注入properties属性文件的值 @ConfigurationProperties
- 雨中漫步 - ITeye博客
博客分类:
在spring boot
1.建立一个普通的bean,利用@ConfigurationProperties:
@Configuration@ConfigurationProperties(locations = "classpath:properyname.properties", prefix = "datasource")public class PropertyBean {
private String driverClassN
private String userN
....................get、set方法
开启扫描此bean,spring application会生成一个PropertyBean
2.@ConfigurationProperties会绑定properties中的值,并且支持层级关系
@ConfigurationProperties(locations = "classpath:mail.properties",
ignoreUnknownFields = false, prefix = "mail")
public class MailProperties {
public static class Smtp {
private boolean starttlsE
// ... getters and setters
3.利用@PropertySource注解
@Configuration
@PropertySource("classpath:mail.properties")
public class MailConfiguration {
@Value("${mail.protocol}")
@Value("${mail.host}")
@Value("${mail.port}")
@Value("${mail.smtp.auth}")
@Value("${mail.smtp.starttls.enable}")
@Value("${mail.from}")
spring boot 会自动注入mail.properties中的值
mail.properties:
mail.host=localhost
mail.port=25
mail.smtp.auth=false
mail.smtp.starttls-enable=false
mail.from=me@localhost
mail.username=
mail.password=
@Configuration@PropertySource("classpath:datasource.properties")public class DataSourceConfig {
public void getValue() {
String name = env.getRequiredProperty("datasource.name");
datasource.properties:
datasource.username=root
wenrisheng
浏览: 105181 次
来自: 广州
你这个spring注解大全,就这么几行,还真是全。。。。。
我擦!我都进来了,你给我看这个!
可以,最后就再写上自己的一点新的体会,这样才提高的快!
博主我能转载文章么?我是一个比较懒的人,很多情况下@property都不喜欢加属性&所以必须了解默认情况下哪些是已经有的,哪些在需要时是必须要加的。
原文链接:.cn/s/blog_8c87ba3b0100x39l.html
此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器。或者如果你使用@synthesize关键字,也是有读取器方法被解析。而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误。
此标记说明属性会被当成读写的,这也是默认属性。设置器和读取器都需要在@implementation中实现。如果使用@synthesize关键字,读取器和设置器都会被解析。
此标记说明设置器直接进行赋值,这也是默认值。在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是可拷贝的。
指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数&&译者注)。
它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。更深入的讨论,请参考&复制&部分。
指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定nonatomic,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单地返回这个值。
所以property的属性默认是:readwrite,assign, atomic(没有这个关键字)
阅读(...) 评论()用户名:fluagen
文章数:193
评论数:69
访问量:1563807
注册日期:
阅读量:1297
阅读量:3317
阅读量:440076
阅读量:1126721
51CTO推荐博文
Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件。它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门的操作属性文件的类。这个类就是 java.uitl.Properties类,由于Properties类是一个集合类,所以,Properties会将属性以集合的方式读写。
注意:下面的代码中对于抛出的异常都未采取捕获的方式,自己在编写程序的时候一定要注意捕获异常,推荐将捕获的异常处理掉。
Properties类继承字Hashtable类,采用键值对应的存储方式,在使用Properties类管理属性文件时有什么方便的呢?Properties类有专门的读写方法来读写Properties属性文件,不用担心读写的格式问题,只要为Properties类提供一个读写流即可。Properties用于读写属性文件的方法分别是:
&&&public&void&load(InputStream&inStream)&throws&IOException&{}& &&
&&&public&void&store(OutputStream&out,&String&comments)&throws&IOException&{}&&&
//读取属性文件流的方法
public void load(InputStream inStream) throws IOException {}
//写属性文件流的方法
public void store(OutputStream out, String comments) throws IOException {}
首先,我们来看看如何从一个属性文件中读取属性。
假定我们已经新建了一个属性文件,名为prop.properties,内容如下:
sitename=abcjava& &&
&&&siteurl=&&&
sitename=abcjava
我们要做的第一步就是要将文件读取到Properties类对象中,由于load有一个参数是InputStream,所以我们可以用 InputStream的子类FileInputStream将属性文件读取到Properties对象中,知道prop.properties的路径,我们就用FileInputStream(String name)构造函数:
Properties&prop&=&new&Properties();&&
&&&FileInputStream&fis&=&new&FileInputStream(&prop.properties&);&&
&&&prop.load(fis);&&
Properties prop = new Properties();//属性集合对象
FileInputStream fis = new FileInputStream(&prop.properties&);//属性文件流
prop.load(fis);//将属性文件流装载到Properties对象中
接下来我们将做的事情就是如果读取一个属性,因为属性文件中的每一行都是一个键值对应,所以每一行都代表了一个属性对象,每一行都将以键和值的关系存储到Properties中,Properties类提供了getProperty(String key)方法用来通过键名读取键值,当key在属性集合中找不到时又想为key在程序中赋予一个值时可以使用public String getProperty(String key, String defaultValue)方法,这个方法的意思就是用指定的键在属性列表中搜索属性。如果在属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回默认值变量:
&&&System.out.println(&获取属性值:sitename=&&+&prop.getProperty(&sitename&));& &&
&&&System.out.println(&获取属性值:country=&&+&prop.getProperty(&country&,&&中国&));&&&
//获取属性值,sitename已在文件中定义
System.out.println(&获取属性值:sitename=& + prop.getProperty(&sitename&));
//获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件
System.out.println(&获取属性值:country=& + prop.getProperty(&country&, &中国&));
在知道怎么读取属性文件之后我们还有一个很重要的事情就是要修改和添加新的属性到属性文件,这里就是使用public void store(OutputStream out, String comments)方法,这个方法是将属性集合写到一个OutputStream流中,同InputStream流一样,这里同样是使用其子类 FileOutputStream(String name),这里就不多说了。
在保存属性集合到文件之前,我们还有一件事情就是如何修改和添加新的属性到属性集合,这里使用了一个方法就是setProperty(String key, String value),这个方法就是当属性集合中存在指定的key时,就修改这个key的值,如果不存在,就新建一个key,同样是通过键值关系保存的,但值得注意的是,Properties类继承自Hashtable,所以也可以用Hashtable的put和putAll方法保存,但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不是 Strings 的项。相反,应该使用 setProperty 方法。如果在&有危险&的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。那好,下面我们就来看看修改、添加和保存属性的程序:
//修改sitename的属性值
prop.setProperty(&sitename&, &Boxcode&);
//添加一个新的属性studio
prop.setProperty(&studio&, &Boxcode Studio&);
//文件输出流
FileOutputStream fos = new FileOutputStream(&prop.properties&);
//将Properties集合保存到流中
prop.store(fos, &Copyright (c) Boxcode Studio&);
fos.close();//关闭流
接下就是整个程序的源代码:
import&java.io.FileInputS &&
import&java.io.FileOutputS &&
import&java.util.P &&
public&class&PropertyEditor&{ &&
&&&&public&static&void&main(String[]&args)&throws&Exception&{ &&
&&&&&&&&Properties&prop&=&new&Properties();&&
&&&&&&&&FileInputStream&fis&=&new&FileInputStream(&prop.properties&);&&
&&&&&&&&prop.load(fis);&&
&&&&&&&&fis.close();&&
&&&&&&&&&&
&&&&&&&&System.out.println(&获取属性值:sitename=&&+&prop.getProperty(&sitename&)); &&
&&&&&&&&&&
&&&&&&&&System.out.println(&获取属性值:country=&&+&prop.getProperty(&country&,&&中国&)); &&
&&&&&&&&&&
&&&&&&&&prop.setProperty(&sitename&,&&Boxcode&); &&
&&&&&&&&&&
&&&&&&&&prop.setProperty(&studio&,&&Boxcode&Studio&); &&
&&&&&&&&&&
&&&&&&&&FileOutputStream&fos&=&new&FileOutputStream(&prop.properties&); &&
&&&&&&&&&&
&&&&&&&&prop.store(fos,&&Copyright&(c)&Boxcode&Studio&); &&
&&&&&&&&fos.close();&&
import java.io.FileInputS
import java.io.FileOutputS
import java.util.P
public class PropertyEditor {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();// 属性集合对象
FileInputStream fis = new FileInputStream(&prop.properties&);// 属性文件输入流
prop.load(fis);// 将属性文件流装载到Properties对象中
fis.close();// 关闭流
// 获取属性值,sitename已在文件中定义
System.out.println(&获取属性值:sitename=& + prop.getProperty(&sitename&));
// 获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件
System.out.println(&获取属性值:country=& + prop.getProperty(&country&, &中国&));
// 修改sitename的属性值
prop.setProperty(&sitename&, &Boxcode&);
// 添加一个新的属性studio
prop.setProperty(&studio&, &Boxcode Studio&);
// 文件输出流
FileOutputStream fos = new FileOutputStream(&prop.properties&);
// 将Properties集合保存到流中
prop.store(fos, &Copyright (c) Boxcode Studio&);
fos.close();// 关闭流
在我们知道如何读写一个属性文件之后,我们仍然还有很多需要注意的问题,因为load和store方法都是按照ISO-8859-1的编码方式读写属性流文件的,而ILatin1 的字符和某些特殊字符,而对于非Latin1 的字符和某些特殊字符,则要使用与字符和字符串字面值所用的类似转义序列,以值和元素的形式来表示它们。所以当我们在处理中文时,不可以在直接修改属性文件时,将中文的值赋予给属性,而是要在JAVA程序中通过setProperty方法给属性赋予中文的值,因为这样store会将中文转换成 unicode码,在读取时系统会将读取到的unicode码按系统的编码打印出来,对于中文系统,通常是GBK码,这样中文才能够正常显示。
了这篇文章
类别:┆阅读(0)┆评论(0)
10:28:26 09:31:08 12:52:51 15:16:04FORM中关于item属性设置&SET_ITEM_PROPERTY用法
尽量使用APP_ITEM_PROPERTY.SET_PROPERTY和APP_ITEM_PROPERTY.SET_VISUAL_ATTRIBUTE代替SET_ITEM_PROPERTY
set_item_property是form
builder带的。app_item_property.SET_PROPERTY是oracle公司为ebs开发的包,底层还是调用set_item_property.
APP_ITEM_PROPERTY.SET_PROPERTY 用法
app_item_property.set_property(itemid, ALTERABLE,PROPERTY_ON);
set_item_instance_property(itemid, CURRENT_RECORD,INSERT_ALLOWED,
PROPERTY_ON);
set_item_instance_property(itemid, CURRENT_RECORD,UPDATEABLE,
PROPERTY_ON);
set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON);
set_item_property(itemid, UPDATEABLE, PROPERTY_ON);
ALTERABLE_PLUS
app_item_property.set_property(itemid,
ALTERABLE_PLUS,PROPERTY_ON);
set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON);
set_item_property(itemid, UPDATEABLE, PROPERTY_ON);
如果item是隐藏的无效
app_item_property.set_property(itemid,
ENTERABLE,PROPERTY_ON);
set_item_instance_property(itemid, CURRENT_RECORD,INSERT_ALLOWED,
PROPERTY_ON);
set_item_instance_property(itemid, CURRENT_RECORD,UPDATEABLE,
PROPERTY_ON);
set_item_instance_property(itemid, CURRENT_RECORD,NAVIGABLE,
PROPERTY_ON);
set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON);
set_item_property(itemid, UPDATEABLE, PROPERTY_ON);
set_item_property(itemid, NAVIGABLE, PROPERTY_ON);
如果item是隐藏的无效
app_item_property.set_property(itemid,
ENABLED,PROPERTY_ON);
set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON);
set_item_property(itemid, UPDATEABLE, PROPERTY_ON);
set_item_property(itemid, NAVIGABLE, PROPERTY_ON);
如果是按钮 APP_ITEM_PROPERTY.SET_PROPERTY& 等价于:
set_item_property(itemid, ENABLED, PROPERTY_ON);
If the item is not a text item, list, or button, then the
APP_ITEM_PROPERTY.SET_PROPERTY call 等价于:
set_item_property(itemid, ENABLED, PROPERTY_ON);
set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON);
set_item_property(itemid, UPDATEABLE, PROPERTY_ON);
app_item_property.set_property(itemid,
DISPLAYED,PROPERTY_ON);
set_item_property(itemid, DISPLAYED, PROPERTY_ON);
如果项目不是一个显示项目设置:
set_item_property(itemid, ENABLED, PROPERTY_ON);
set_item_property(itemid, NAVIGABLE, PROPERTY_ON);
If the item is neither a display item nor a button then also
set_item_property(itemid, QUERYABLE, PROPERTY_ON);
set_item_property(itemid, INSERT_ALLOWED, PROPERTY_ON);
set_item_property(itemid, UPDATEABLE, PROPERTY_ON);
app_item_property.set_property(itemid,
REQUIRED,PROPERTY_ON);
set_item_property(itemid, REQUIRED, PROPERTY_ON);
如果item是隐藏的无效
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 meta property属性 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信