PropertySet 学习一
http://www.opensymphony.com/propertyset/
一、PropertySet介绍
PropertySet:管理属性(Property)的好工具,它提供一个抽象方法来向一个持久性存储源中动态保存和取回类型化的属性数据。支持多种持久化方式,例如:XML, EJB, Ofbiz, JDBC, Castor JDO,Memory等,同时也提供了一个简单的API来根据你的需要写你自己定制的PropertySets。
A PropertySet is designed to be associated with other entities in the system for storing key/value property pairs. :简单的说,设计PropertySet是用来存储键值/属性对的。
二、PropertySet的用法和配置
PropertySet模块的配置文件被存入当前应用的类路径,它按照次序找以下文件
1. /propertyset-default.xml
2. /META-INF/propertyset.xml
3. /META-INF/propertyset-default.xml
propertyset-default.xml 文件总是被找到,因为它被包含在propertyset.jar中,你可以通过定义你自己的propertyset-default.xml 文件重写这些配置,这个配置文件的格式如下:
Xml代码 收藏代码
1. <propertysets>
2. <propertset name="baz" class="com.foo.bar.BazPropertySet">
3. <arg name="some" value="thing"/>
4. ...
5. </propertyset>
6. ...
7. </propertysets>
<propertysets>
<propertset name="baz" class="com.foo.bar.BazPropertySet">
<arg name="some" value="thing"/>
...
</propertyset>
...
</propertysets>
使用上面的PropertySet的代码是:
Java代码 收藏代码
1. import com.opensymphony.module.propertyset.*;
2. ...
3. HashMap args = new HashMap();
4.
5. // add parameters to the args map
6. PropertySet ps = PropertySetManager.getIntance("baz", args);
import com.opensymphony.module.propertyset.*;
...
HashMap args = new HashMap();
// add parameters to the args map
PropertySet ps = PropertySetManager.getIntance("baz", args);
args 用来初始化配置中的参数。
二、PropertySet 数据库说明
绝大部分PropertySet实现都把数据持久化到关系型数据库中,因为PropertySet 存储了很多类型的数据,而在开发的时候是那种类型是不确定的,所以数据库结果表并不是最优、最标准的组织形式。由于这种表设计不是最优的,所以在这些表上做查询时速度将会很慢。所以我们建议建立下面的索引(indices)在表OS_PROPERTYENTRY 上,这样可以提高20%的速度。
Sql代码 收藏代码
1. CREATE UNIQUE INDEX os_PropertyEntry_keyidx ON os_PropertyEntry( entityName, entityId, keyValue )
2. CREATE UNIQUE INDEX os_PropertyEntry_allidx ON os_PropertyEntry( entityName, entityId )
CREATE UNIQUE INDEX os_PropertyEntry_keyidx ON os_PropertyEntry( entityName, entityId, keyValue )
CREATE UNIQUE INDEX os_PropertyEntry_allidx ON os_PropertyEntry( entityName, entityId )
除了索引,另一个可以提高性能的方面是当你写应用时key名字的考虑,如果你所有的key名都像com.acme.foo, com.acme.bar,com.acme.baz,你的数据库不可能恰当的区分OS_PROPERTYENTRY 中的数据,或者把key 名取得直白、明确一些,例如:foo,bar,and bax,移除相同的前缀,或者使用一个不同key命名惯例,例如:oof.emca.moc, rab.emca.moc, and zab.emca.moc。总之,通过恰当的取key的名字,你的数据库可以更快的访问PropertySets.
三、PropertySet接口说明
public interface PropertySet
一个键只能包含一个值,键必须是唯一的(即使类型不同)。如果使用了一个已经被用的键名且类型相同,设置的新值将会覆盖旧值。
1、如果使用一个已经被用的但是类型不同的键,一个DuplicatePropertyKeyException异常将被抛出。
2、一个属性有多种类型也是不被允许的,如果一个属性有多个类型,一个IllegalPropertyException 异常将被抛出。
3、如果得到一个已存在属性,但是返回的类型不对应,一个InvalidPropertyTypeException异常被抛出。
4、如果取一个不在的属性,null(或者是初始值)被返回。
使用一个不同的类型返回 ,如果新的类型比旧的类型长度更长一些,则不会抛出异常,例如用float 类型接整型数据。
四、Class CachingPropertySet
此类实现了PropertySet接口,属于包
com.opensymphony.module.propertyset.cached.CachingPropertySet
1、PropertySet 的实现,可以存储到属性到缓冲中。
2、当你的应用是一个独占的访问时才能用这个类,否则警慎使用。
3、大数据量的装载。
分享到:
相关推荐
- **构造与销毁**:`PropertySet(void)`和`virtual ~PropertySet(void)`用于创建和销毁`PropertySet`实例。 - **属性添加** - `void addProperty(Property* property)`:允许向`PropertySet`中添加属性。 **3. ...
JSP的setProperty的使用方法 一 介绍 作用 给已经实例化的javabean对象的属性赋值,一共有四种形式。 二 四种形式 三 实例 1、login.jsp <%@ page language=java import=java.util.* contentType=...
DeviceIoControl hDevice, IOCTL_STORAGE_QUERY_PROPERTY, VarPtr(PropertySet), LenB(PropertySet), VarPtr(PropertyData), BufferSize, BufferSize, 0 ' 输出硬盘信息 Debug.Print "硬盘制造商:" & StrConv...
#### 一、ASP与Property概念介绍 在开始深入解析这个示例之前,我们先来了解一下ASP(Active Server Pages)以及Property的基本概念。 **ASP(Active Server Pages)** 是一种服务器端脚本环境,在HTML页面中嵌入...
1. **控件介绍** PropertyGrid控件通过反射技术自动发现对象的公共属性、方法和事件,并以网格的形式展示出来。用户可以方便地查看和修改这些属性的值,极大地简化了用户界面的设计工作。 2. **基本用法** - 添加...
Debug.Print "Serial Number: " & propertySet.SerialNumber Else MsgBox "Error retrieving device information." End If CloseHandle hDevice Else MsgBox "Error opening device." End If ``` 这段代码...
本文将详细介绍如何解决“Unable to connect to Manager Service”的问题,并确保ArcGIS Server服务能够正常运行。 #### 一、问题背景 当你在安装了ArcGIS Server Edition之后更改了计算机的名称,可能会遇到以下...
标题中的“spring介绍(set和构造器注入)”是指在Spring框架中两种主要的依赖注入(Dependency Injection,简称DI)方式:setter注入和构造器注入。在Spring框架中,DI是一种核心特性,它允许我们解耦组件之间的关系...
本篇文章将详细介绍如何在Java中读取和保存包含中文的Property文件。 首先,让我们理解Property文件的结构。一个简单的`config.properties`文件可能如下所示: ``` # 这是一个注释 username=张三 password=123456 ...
以下是对标题“IOS property属性详细介绍使用注意事项”所涉及知识点的详细说明: 1. **原子性 (Atomicity)** - **atomic**:原子性是指在多线程环境下,编译器会为getter和setter方法添加同步锁,以防止同一时刻...
本文将详细介绍如何利用Java反射来创建get和set方法,并演示如何通过反射机制调用这些方法。 #### Java反射概述 Java反射机制提供了一种方式,可以在运行时获取类的信息,并创建和操作对象。这为开发者提供了极大的...
properties.setProperty("existingKey", "updatedValue"); // 保存到文件 saveProperties("config.properties"); ``` #### 五、其他常用方法 `Properties`类还提供了一些其他有用的方法,如: - `containsKey(key)...
在iOS开发中,`@property` 是Objective-C中的一个关键字,用于声明类的实例变量(ivar)并自动合成存取方法(setter和getter)。通过使用`@property`,开发者可以方便地控制实例变量的访问权限、内存管理策略、线程...
Set pPropSet = New PropertySet With pPropSet .SetProperty "SERVER", "HHUGIS" '服务器名称 .SetProperty "INSTANCE", "esri_sde" 'ArcSDE服务实例 .SetProperty "DATABASE", "" '对于Oracle,不需要指定 ....
本教程将详细介绍如何在不使用属性绑定的情况下,手动动态地向`PropertyGrid`添加数据行并进行显示。 首先,理解`PropertyGrid`的基本工作原理至关重要。`PropertyGrid`是.NET Framework中的一个控件,它通过反射...
以下将详细介绍Flex中GET和SET方法的使用以及它们的重要性。 GET方法在Flex中是用来获取一个对象属性值的函数。它允许你安全地读取对象的状态,而无需直接暴露对象的内部数据。创建GET方法的一般形式如下: ```...
本文将深入探讨XML、Excel、TXT和Property文件的解析方法,并重点介绍使用Dom4j和JDOM等技术进行XML解析。 首先,XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛用于数据交换和配置文件。它的...
接下来我们将详细介绍property属性的基本概念、使用方法和在Python中的应用场景。 首先,property属性的定义是通过装饰器的方式来实现的。装饰器是一种设计模式,在Python中经常用于修改或者增强现有函数或方法的...
本文档介绍了一个具体的宏实现方案,即通过 Visual Studio 宏来自动为指定字段生成 Get 和 Set 属性。 #### 宏的基本结构与实现 该宏主要由三个部分组成:`EncapsulateField`、`EncapsulateAllFields` 和 `...
在本文中,我们将详细介绍Java Property类的使用,包括它的继承关系、基本方法、读取和写入配置文件等方面。 继承关系 Properties类继承于Hashtable,它表示一个持久的属性集,属性列表以key-value的形式存在,key...