日期:2014-05-16  浏览次数:20337 次

JSON学习笔记[自己的项目]

JSON学习笔记

JsonResponseUtil 和JsonUtil,这两个工具类都实现接口InitializingBean!

Spring的InitializingBean和init-method
1、Spring在设置完一个bean所有的属性后,会检查bean是否实现了InitializingBean接口,如果实现就调用bean的afterPropertiesSet方法。(这个接口只有一个方法 afterPropertiesSet,这个方法会在 Bean 完成属性设置之后执行)另外,如果bean是单例的,则afterPropertiesSet方法只会被调用一次;否则每次创建bean时afterPropertiesSet方法都会被重新调用.
Spring虽然可以通过InitializingBean完成一个bean初始化后对这个bean的回调,但是这种方式要求bean实现 InitializingBean接口。一但bean实现了InitializingBean接口,那么这个bean的代码就和Spring耦合到一起了。通常情况下不建议直接实现InitializingBean,而是用Spring提供的init-method的功能来执行一个bean 子定义的初始化方法,这可以在一个bean的配置文件中通过init-method声明:
<bean id="testBean" class="TestClass" init-method="initialize"/>
spring要求这个init-method方法是一个无参数的方法

如果一个bean同时实现了这两种方式的初始化配置,则spring会先调用afterPropertiesSet方法,然后通过反射调用init-method,任何一个方法出错都会导致spring创建bean失败.如果afterPropertiesSet方法调用失败,也不会再继续执行init-mehtod方法.

2、实现org.springframework.beans.factory.InitializingBean接口允许一个bean在他的所有必需的属性被BeanFactory设置后,来执行初始化的工作。当然可以使用init-method来取代实现这个接口,以让应用不与spring产生耦合。如果一个bean既实现了InitializingBean,又指定了init-method,则spring会先调InitializingBean的方法,在调init-method指定的方法。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
???? “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
???? 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
?
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
?
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
?
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
字符串(string)与C或者Java的字符串非常相似。
?
数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。
?
空白可以加入到任何符号之间。 以下描述了完整的语言。



P17系统的实现说明:
??? Web层的调用类JsonResponseUtil.java
??? 工具类:JsonUtil.java

原理是通过工具类JsonUtil进行对象装换,全部转为字符串,通过调用类JsonResponseUtil将字符串写入response,在通过Ajax回调。
在设置过程中需要设置response的contentType、charsetName!这两个字段不用指定在代码中,配置在xml文件中

通过Spring注入:
??? <!-- 工具类配置 -->
??? <bean id="jsonUtil" class="com.cpic.p17.pf.util.json.JsonUtil">
??? ??? <description>上传的Action基类,下面配置具体的类解析方法</description>
??? ??? <property name="jsonProcessor">
??? ??? ??? <list>
??? ??? ??? ??? <bean class="com.cpic.p17.pf.util.json.DateJsonValueProcessor">
??? ??? ??? ??? ??? <constructor-arg><value>yyyy-MM-dd</value></constructor-arg>
??? ??? ??? ??? </bean>
??? ??? ??? ??? <bean class="com.cpic.p17.pf.util.json.TimeStampJsonValueProcessor">
??? ??? ??? ??? ??? <constructor-arg>
<value>yyyy-MM-dd hh:mm:ss</value>
</constructor-arg>
??? ??? ??? ??? </bean>
??? ??? ??? </list>
??? ??? </property>
??? </bean>
???
??? <bean id="jsonResponseUtil" class="com.cpic.p17.pf.util.web.JsonResponseUtil">
??? ??? <description>JSON返回HttpResponse的封装的工具类</description>
??? ??? <property name="jsonUti