Java基础-使用反射做一个简易框架
目录
案例要求:
实现思路:
代码:
Dog类:
Teacher类:
Student类:
Test类:
Tools类:
records.txt文件
总结:
案例要求:
实现思路:
先设置Dog实体类,Teacher实体类,Student类,然后设置反射操作类即可
代码:
Dog类:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dog {private String name;private int age;
}
这个文件定义了一个 Java 实体类 Dog
(狗),用于封装与 “狗” 相关的数据(名称和年龄)。通过 Lombok 注解简化了代码编写,主要作用是:
-
数据封装
类中定义了两个私有属性:name
:字符串类型,存储狗的名字age
:整数类型,存储狗的年龄
用于结构化地保存和表示 “狗” 的信息。
-
Lombok 注解的作用
借助 Lombok 框架的注解,自动生成了常规 Java 类需要手动编写的代码:@Data
:自动生成getter
、setter
、toString()
、equals()
、hashCode()
方法@NoArgsConstructor
:自动生成无参构造器(new Dog()
)@AllArgsConstructor
:自动生成全参构造器(new Dog("旺财", 3)
)
-
使用场景
作为数据载体,常用于:- 存储和传递狗的信息(如从数据库查询结果映射、接口请求 / 响应参数)
- 集合中存储多个狗的对象(如
List<Dog>
) - 简化代码,避免手动编写大量模板代码
Teacher类:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Teacher {private String name;private String zhiye;private int age;
}
这个文件定义了一个 Java 实体类 Student
(学生),用于封装学生的基本信息,通过 Lombok 注解简化了代码开发,具体作用如下:
1. 核心功能:数据封装
类中定义了学生的三个核心属性(私有成员变量):
name
:字符串类型,存储学生姓名(如 "张三")age
:整数类型,存储学生年龄(如 18)sex
:字符串类型,存储学生性别(如 "男"、"女")
这些属性共同构成了 “学生” 这一实体的数据结构,用于结构化地保存和表示学生信息。
2. Lombok 注解的作用
通过 Lombok 框架的三个注解,自动生成了常规 Java 类需要手动编写的代码,减少模板代码:
@Data
:自动生成所有属性的getter
(获取值)、setter
(修改值)方法,以及toString()
(对象转字符串)、equals()
(对象比较)、hashCode()
(哈希值计算)方法。@NoArgsConstructor
:自动生成无参构造器,允许通过new Student()
创建对象(创建后再通过setter
赋值)。@AllArgsConstructor
:自动生成全参构造器,允许通过new Student("张三", 18, "男")
直接创建并初始化对象。
3. 使用场景
作为数据载体,常用于:
- 存储学生信息(如从数据库查询的学生记录、前端表单提交的学生数据)
Student类:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {private String name;private int age;private String sex;
}
Test类:
public class Test {public static void main(String[] args) throws Exception {Dog dog=new Dog("马犬",4);Tools.save( dog);Student student=new Student("小张",21,"男");Tools.save( student);Teacher teacher=new Teacher("小王","语文",30);Tools.save( teacher);}
}
这个 Test
类是一个测试类,用于验证 Tools
工具类的 save
方法是否能正常工作。它通过创建不同类型的对象(Dog
、Student
、Teacher
),并调用 Tools.save()
方法将这些对象的信息保存到文件中,从而测试对象持久化功能。
代码功能解析
-
创建对象实例
- 创建
Dog
类对象:new Dog("马犬", 4)
(名字为 "马犬",年龄 4 岁) - 创建
Student
类对象:new Student("小张", 21, "男")
(姓名 "小张",年龄 21,性别 "男") - 创建
Teacher
类对象:new Teacher("小王", "语文", 30)
(姓名 "小王",职业 "语文",年龄 30)
- 创建
-
调用工具类保存对象
对每个创建的对象调用Tools.save(对象)
方法,触发对象信息写入文件的操作:Tools.save(dog)
:保存狗的信息Tools.save(student)
:保存学生的信息Tools.save(teacher)
:保存教师的信息
执行结果
运行 main
方法后,src\records.txt
文件会按以下格式记录所有对象的信息:
plaintext
======================Dog======================
name=马犬
age=4
======================Student======================
name=小张
age=21
sex=男
======================Teacher======================
name=小王
zhiye=语文
age=30
核心作用
- 验证功能:测试
Tools
类的save
方法是否能正确处理不同类型的对象,反射是否能获取所有属性(包括私有属性),文件写入是否正常。 - 演示用法:展示如何使用
Tools
工具类对任意对象进行持久化,为实际开发提供示例。
简单来说,这个测试类通过实际案例验证了 “通用对象保存到文件” 的功能是否可行,是对 Tools
工具类的实际应用和效果检验。
Tools类:
import java.io.FileOutputStream;
import java.io.FilterOutputStream;
import java.io.PrintStream;
import java.lang.reflect.Field;public class Tools {public static void save(Object obj) throws Exception{PrintStream out = new PrintStream(new FileOutputStream("src\\records.txt",true));Class c = obj.getClass();String name=c.getSimpleName();out.println("======================"+name+"======================");Field[] fields=c.getDeclaredFields() ;for (Field field:fields){String fieldName=field.getName();field.setAccessible(true);Object fieldValue=field.get(obj);out.println(fieldName+"="+fieldValue);}out.close();}
}
这个 Tools
类是一个通用工具类,提供了一个 save
方法,用于将任意 Java 对象的属性信息持久化保存到文件(src\records.txt
)中。它利用了 Java 反射机制来动态获取对象的属性和值,实现了对不同类型对象的通用保存功能。
核心功能解析
save(Object obj)
方法的作用是:接收一个任意对象,通过反射获取该对象的类名、所有属性名及属性值,然后按照固定格式格式写入到文件中。
records.txt文件
用于记录信息
======================Dog======================
name=马犬
age=4
======================Student======================
name=小张
age=21
sex=男
======================Teacher======================
name=小王
zhiye=语文
age=30
总结:
本文介绍了一个基于Java反射机制实现对象持久化存储的案例。首先定义了三个实体类(Dog、Teacher、Student)使用Lombok简化代码,然后通过测试类Test创建这些类的实例。核心工具类Tools利用反射动态获取对象的类名和属性信息,将数据以固定格式写入records.txt文件。该方案实现了对任意Java对象的通用存储功能,展示了反射机制在对象持久化中的应用价值。