当前位置: 代码迷 >> Web前端 >> Spring中的<idref bean=""/><ref local=""/><idref local=""/><ref bean=""/>引见
  详细解决方案

Spring中的<idref bean=""/><ref local=""/><idref local=""/><ref bean=""/>引见

热度:1256   发布时间:2012-09-22 21:54:54.0
Spring中的<idref bean=""/>,<ref local=""/>,<idref local=""/>,<ref bean=""/>介绍
json(JavaScript object notation)
解析数据
var obj = eval(data);
获取数组中的对象
var x = obj["key"];//obj.key
遍历一个js的对象
for(var id in obj){
var oj = obj[id];
}



Spring资料
Spring中定义了7种不同的事物传播规则
1.PROPAGATION_MANDATORY:表示该方法必须运行在一个事务中。如果当前事务不存在,将抛出一个异常
2.PROPAGATION_NESTED:表示如果当前已经存在一个事务,则该方法应当运行在一个嵌套事务中.
表示嵌套的事务可以从当前事务中单独地提交或回滚。如果当前事务不存在,那么他看起来就和PROPAGATION_REQUIRED没有两样。
3.PROPAGATION_NEVER:表示当前的方法不应该运行在一个事务上下文中。如果当前存在一个事务,则会抛出一个异常。
4.PROPAGATION_NOT_SUPPORTED:表示该方法不应在事务中运行。如果一个现有的事务正在运行中,它将在该方法的运行期间被挂起。
5.PROPAGATION_REQUIRED:表示当前方法必须运行在一个事务中。如果一个现有的事务正在运行中,该方法将运行在这个事务中。
否则的话,就要开始一个新的事务。
6.PROPAGATION_REQUIRES_NEW:表示当前方法必须运行在它自己的事务里。它将启动一个新的事务。如果一个现有事务在运行的话,
将在这个方法运行期间被挂起。
7.PROPAGATION_SUPPORTS:表示当前方法不需要事务处理环境,但如果有一个事务已经在运行的话,这个方法也可以在这个事务里运行。

注:事务传播规则回答了一个问题,就是新的事务是否要被启动或是被挂起,或者方法是否要在事务环境中运行。

Spring的事务隔离级别
1.脏读:脏读发生在一个事务读取了被另一个事务改写但还未提交的数据时.如果这些改变在稍后被回滚,那么第一个事务读取的数据就是
无效的。
2.不可重复读:不可重复读发生在一个事务执行相同的查询两次或两次以上,但每一次查询结果都不同时。
这通常是由于另一个并发事务在两次查询之间更新了数据。
3.幻读:幻读和不可重复读相似。当一个事务(T1)读取几行记录后,另一个并发事务(T2)插入一些记录,幻读
就发生了。在后来的查询中,第一个事务(T1)就会发现有一些原来没有的额外的记录。

ISOLATION_DEFAULT:使用后端数据库默认的隔离级别。
ISOLATION_READ_UNCOMMITTED:允许你读取还未提交的改变了的数据。可能导致脏读,幻读或不可重复读
ISOLATION_READ_COMMITTED:允许在并发事务已经移交后读取。可防止脏读,但幻读和不可重复读仍可能发生
ISOLATION_REPEATABLE_READ:对相同字段的多次读取的结果是一致的,除非数据被睡本身改变。可防止脏读和不可重复读,但幻读仍可能发生
ISOLATION_SERIALIZABLE:完全服从ACID的隔离级别,确保不发生脏读,不可重复读和幻读。这在所有的隔离级别中也是最慢的,因为他是典型
的通过完全锁定在事务中涉及的数据表来完成的

ISOLATION_READ_UNCOMMITTED是高效的隔离级别,但是事务的隔离级别程度也是最低的。事务对脏读,不可重复读和幻读是开放的。
在另外一个极端,ISOLATION_SERIALIZABLE防止任何形式的隔离问题,但效率是最低的。


只读
如果一个事务只对后端数据库执行读操作,数据库就可能利用事务只读特性,使用某些优化措施。
通过声明一个事务为只读,你就给了后端数据库一个机会,来应用那些它认为合适的优化措施。
因为只读的优化措施是在事务启动时由后端数据库实施的,所以,只有将那些具有可能
启动新事务的传播行为的方法的事务标记成只读才有意义(PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW,PROPAGATION_NESTED).

事务超时
在事务启动时,超时的时钟就开始滴答响了,所以只有将那些具有可能启动新事务的传播行为的方法的事务
设置超时才有意义(PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW,PROPAGATION_NESTED).


spring中的<idref bean=""/>,<ref local=""/>,<idref local=""/>,<ref bean=""/>介绍
idref元素提供了一种速记和检验错误的方式,它用来设置属性为容器中其他bean的id或name,如下:
<bean id="beanA" class="...."/>
<bean id="beanB" class="...">
	<property name="name">
		<idref bean="beanA" />
	</property>
</bean>
如上代码在运行时等同于如下的代码片段:
<bean id="beanA" class="....">
</bean>
<bean id="beanB" class="...">
	<property name="name">
		<value>beanA</value>
	</property>
</bean>
可以看到第一种形式要好于第二种形式;通过使用idref,spring在装载的时候就会
检验其他bean是否存在;而第二种形式中,指定了name属性后,spring仅会在实例化
该类时才做检验。

另外,还可以使用local属性,条件是被引用的bean必须定义在同一个xml文件中,
并且,bean的名称就是bean的id。采用这种方式,会更早地在xml文档解析时,就检验bean
的名称,代码如下:
<property name="name">
		<idref local="beanA" />
</property>

ref元素用来设置bean的协作者(引用其他bean作为属性),即一种依赖关系.
使用ref元素的bean属性是最常见的用法,它允许指向位于同一个或父bean工厂的bean(无论是否在同一个xml
文件中)。bean的属性值可以同目标bean的id或name属性相同,如下:
<ref bean="someBean"/>

local属性用以指定位于同一个文件中的bean,它可以利用xml解析器来验证xml的id引用。
local属性值必须与目标bean的id属性一致。当发现在同一个文件中不存在匹配元素时,将会报错。
为了尽可能早地发现错误,当目标bean位于同一个xml文件中,应当使用local,如下:
<ref local="someBean"/>
  相关解决方案