【反射的应用场景(一)】

一、应用场景

Redis缓存系统中使用Json字符串中存储一些缓存信息,减少数据库压力。但是数据库可能会定时更新,数据库只有只读权限,没法知道哪些数据库更新了,一种解决方案:定期遍历数据库数据,覆盖缓存,特点是快,缺点是没法知道哪些数据更新了  第二种解决方案:数据库中遍历的值和缓存系统的值进行比较,记录变化数据,此时可以使用数据库作为外层循环或者使用缓存系统作为外层循环,缺点是慢,优点是知道用户何时更新了哪些数据。

中心思想:比较VO转为的Json字符串中的值和对象中的值是否一致,不一致则更新Json字符串的值。

二、源代码

package demo.tt.p002;

import java.lang.reflect.Field;

import org.json.JSONObject;

import demo.tt.UserVO;

public class Demo {

/**

*    <!-- https://mvnrepository.com/artifact/org.json/json -->

<dependency>

   <groupId>org.json</groupId>

   <artifactId>json</artifactId>

   <version>20160212</version>

</dependency>

* 知识点:

* 1)字符串转Json对象

* 2)遍历对象的值

* 应用:比较Json字符串中的值和对象中的值是否一致,不一致则更新

* @param args

* @throws IllegalAccessException 

* @throws IllegalArgumentException 

* @author gaojingsong

*/

public static void main(String[] args) throws Exception {

UserVO vo = new UserVO();

vo.setName("gaojs");

vo.setAge(27);

vo.setId(200808512);

//VO对象转Json对象

JSONObject json = new JSONObject(vo);

System.out.println(json);

//字符创对象转Json对象

String str ="{\"id\":200808512,\"name\":\"gaojs\",\"age\":27,\"create_time\":\"20160722\"} ";

JSONObject json1 = new JSONObject(str);

System.out.println(json1);

System.out.println("--------反射的执行----------");

Class c = vo.getClass();

Field[] fields = c.getDeclaredFields();

for (Field field : fields) {

field.setAccessible(true);

String name = field.getName();

Object obj = field.get(vo);

System.out.println(obj +", json1   "+json1.get(name));

}

}

}

三、验证



 



 

猜你喜欢

转载自gaojingsong.iteye.com/blog/2314166