0%

解释

image-20200818101345327

image-20200818101745272

image-20200818103600850

获取成员变量

image-20200818110239254

image-20200818110548608

image-20200818110827575

获取成员方法

image-20200818111336533

image-20200818111516767

image-20200818111614261

代码(获取构造器)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
* @author xixing
* @version 1.0
* @date 2020/8/18 10:36
*/
public class ConstructCollector {

public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class<?> clazz = Class.forName("site.xixing.demo.reflect.ReflectTarget");


//获取全部公有的构造方法
System.out.println("获取全部公有的构造方法");
Constructor<?>[] constructors = clazz.getConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor);
}

//获取全部构造方法
System.out.println("获取全部的构造方法");
Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println(declaredConstructor);
}

//获取单个公有方法
System.out.println("获取单个公有构造方法");
Constructor<?> constructor = clazz.getConstructor(char.class);
System.out.println(constructor);

//获取单个私有方法
System.out.println("获取单个私有构造方法");
Constructor<?> declaredConstructor = clazz.getDeclaredConstructor(int.class);
System.out.println(declaredConstructor);

System.out.println("通过反射私有构造方法创建实例");
declaredConstructor.setAccessible(true);
ReflectTarget reflectTarget=(ReflectTarget) declaredConstructor.newInstance(1);
reflectTarget.sayHello();


}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* @author xixing
* @version 1.0
* @date 2020/8/18 10:18
*/
public class ReflectTarget {


ReflectTarget(String str){
System.out.println("受保护的构造函数:"+"String="+str);
}

public ReflectTarget(char name){
System.out.println("公有的带参数构造方法\t name="+name);
}

public ReflectTarget(){
System.out.println("无参的构造方法·");
}

public ReflectTarget(String str,int index){
System.out.println("带两个参数的构造方法\t str="+str+"index="+index);
}

protected ReflectTarget(boolean flag){
System.out.println("返回值为bool的受保护构造方法+flag="+flag);
}

private ReflectTarget(int index){
System.out.println("私有的构造函数:index="+index);
}

public void sayHello(){
System.out.println("Hello 我是public方法");
}

public static void main(String[] args) {


ReflectTarget reflectTarget=new ReflectTarget();
//1.第一种方法
Class<? extends ReflectTarget> reflectTargetClass1 = reflectTarget.getClass();

System.out.println("first :"+reflectTargetClass1.getName());


//2.第二种方式
Class reflectClass2=ReflectTarget.class;
System.out.println("second :"+reflectClass2.getName());


System.out.println(reflectTargetClass1==reflectClass2);

//3.第三种方式
try {
Class reflectClass3=Class.forName("site.xixing.demo.reflect.ReflectTarget");

System.out.println(reflectClass3.getName());
System.out.println(reflectClass2==reflectClass3);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}


}

LOAD DATA INFILE ‘F:/BaiduNetdiskDownload/qaq.txt’
INTO TABLE qaq
FIELDS TERMINATED BY ‘\t’
ENCLOSED BY ‘“‘
LINES TERMINATED BY ‘\n’

FastJson使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@SpringBootApplication
@MapperScan("tech.xixing.huaxuemall.mapper")
public class HuaxuemallApplication {

public static void main(String[] args) {
SpringApplication.run(HuaxuemallApplication.class, args);
}

@Bean
public HttpMessageConverters fastJsonHttpMessageConverters(){
//1.需要定义一个convert转换消息的对象;
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//2:添加fastJson的配置信息;
FastJsonConfig fastJsonConfig = new FastJsonConfig();
/**
* TODO 第一个SerializerFeature.PrettyFormat可以省略,毕竟这会造成额外的内存消耗和流量,第二个是用来指定当属性值为null是是否输出:pro:null
      * SerializerFeature.SkipTransientField
*/
fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue);
//3处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//4.在convert中添加配置信息.
fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = fastJsonHttpMessageConverter;
return new HttpMessageConverters(converter);
}
}

fastJson的循环/重复引用问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
{
"data": [
{
"brand": {
"brandName": "罗恩",
"categories": "1|2|3|",
"descs": null,
"id": 1,
"picture": "https://manager.chem-mall.com/files/brands_mng_logo_1545016241_8626.jpg",
"sorted": 1,
"titleId": null
},
"productCategoryList": [
{
"casNo": "7647-14-5",
"categoryId": 12,
"chemicalFormula": "NaCl",
"chineseName": "氯化钠",
"englishName": "NaCl",
"id": 1,
"picture": "https://www.chem-mall.com/assets/proimgs/7647-14-5.jpg?1596848355",
"sorted": 1
},
{
"casNo": null,
"categoryId": 12,
"chemicalFormula": null,
"chineseName": "11-马来酰亚胺基十一酸,97%",
"englishName": null,
"id": 2,
"picture": "https://www.chem-mall.com/assets/proimgs/57079-01-3.jpg?1596933930",
"sorted": 1
}
]
},
{
"brand": {
"brandName": "罗恩test",
"categories": "1|2|3|",
"descs": null,
"id": 4,
"picture": "https://manager.chem-mall.com/files/brands_mng_logo_1545016241_8626.jpg",
"sorted": 1,
"titleId": null
},
"productCategoryList": [
{
"$ref": "$.data[0].productCategoryList[0]"
},
{
"$ref": "$.data[0].productCategoryList[1]"
}
]
}
],
"msg": null,
"status": 0
}

出现”$ref”: “$.data[0].productCategoryList[0]”

如果是重复引用可以new一个新对象来解决

example:

1
2
3
4
5
//为了防止转json出现引用问题
ProductCategory productCategory1=new ProductCategory();
BeanUtils.copyProperties(productCategory,productCategory1);

productCategories.add(productCategory1);

如果是循环引用:

在配置中加上这句,不过已经被废弃了

1
fastJsonHttpMessageConverter.setFeatures(SerializerFeature.DisableCircularReferenceDetect);

可以替换成以下:

1
2
3
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);

image-20200804111959100