Эта статья участвовала в приказе о созыве Haowen, нажмите, чтобы просмотреть:Двойные заявки на внутреннюю и внешнюю стороны, призовой фонд в 20 000 юаней ждет вас, чтобы бросить вызов!
предисловие
В процессе разработки ведение журнала часто является неотъемлемой частью системы, которую можно условно разделить на два случая: первый — это системный журнал, который аналогичен журналу входа в систему, журналу вызовов интерфейса и т. д. Этот тип журнала в основном используется для записи системного журнала.Ситуация доступа и ситуация вызова метода интерфейса в основном используются разработчиками, что может быть реализовано через аннотацию, совмещенную с принципом аоп, через сканирование заданного метода и добавление правил, какие аннотации в начало метода записывается в журнал; во-вторых, это бизнес-журнал, который в основном используется для записи некоторых бизнес-изменений или изменений атрибутов в системе, таких как изменение статуса записи или изменение атрибутов объекта в процесс бизнес-потока Записи операций, в основном используемые системными операторами.
задний план
На основе записи бизнес-журнала в реальном сценарии разработки в этой статье кратко объясняется процесс использования принципа отражения Java для записи изменения атрибута, когда системный оператор изменяет атрибуты объекта.Основной процесс кода разделен на 3 основных этапа. : объявить пользовательские аннотации, ссылки на классы сущностей, тесты методов. Без лишних слов, посмотрите на код:
1. Объявите пользовательские аннотации
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldChangeConfig {
public String change();
}
2. Ссылка на класс сущностей
public class StationEntity {
private String stationId; //id
private String stationNo; // 油站编号
@FieldChangeConfig(change="名称变化")
private String stationName; // 油站名称
@FieldChangeConfig(change="地址变化")
private String stationAddr; // 油站地址
private String stationLeader; //负责人id
private String leaderName; // 负责人名称
private String stationTel; // 联系方式
private String maintainerNo; // 维修承包商编号
private String maintainerNames; // 维修承包商名称
此处省略属性的set、get方法
}
3. Тестирование метода
public static void main(String[] args) throws IllegalArgumentException, IntrospectionException, IllegalAccessException, InvocationTargetException{
StationEntity a1 = new StationEntity();
a1.setStationName("油站1");
a1.setStationAddr("地址1");
StationEntity a2 = new StationEntity();
a2.setStationName("油站2");
a2.setStationAddr("地址2");
Map<String, List<Object>> map = getFieldChange(a1, a2,StationEntity.class);
String modifyContent = "";
if(!map.isEmpty()){
for(String s : map.keySet()){
System.out.println(s+":" + map.get(s).get(0)+"-"+map.get(s).get(1));
modifyContent += s + ":" + map.get(s).get(0)+"-"+map.get(s).get(1) +"; ";
}
}
System.out.println("修改内容:" + modifyContent);
}
public static Map<String, List<Object>> getFieldChange(Object a1, Object a2,Class clazz) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Map<String, List<Object>> map = new HashMap<String, List<Object>>();
//获取当前类的实例域(即所有属性)
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields){
//循环属性信息,获取该实例域上的注解
FieldChangeConfig annotation = f.getAnnotation(FieldChangeConfig.class);
if(annotation == null){
continue;
}
//获取注解中的内容
String change = annotation.change();
//使用javeBean PropertyDescriptor类型 获取bean的get方法
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
//获取get方法
Method readMethod = pd.getReadMethod();
Object o1 = readMethod.invoke(a1);//实体对象1的属性
Object o2 = readMethod.invoke(a2);//实体对象2的属性
//比较属性信息并将信息的变化以list的形式放入map中,main方法测试时从map中取值并拼接
if(o1==null && o2==null){
continue;
}
if(o1==null || o2 ==null){
List<Object> list = new ArrayList<Object>();
list.add(o1);
list.add(o2);
map.put(change, list);
continue;
}
if(!o1.equals(o2)){
List<Object> list = new ArrayList<Object>();
list.add(o1);
list.add(o2);
map.put(change, list);
continue;
}
}
return map;
}
4. Отображение результатов
Что ж, эта статья полезна для вас? Если вы удовлетворены, не забудьте поставить редактору большой палец вверх. Ваше одобрение и симпатия являются самой большой мотивацией для постоянного выпуска редактора.