反射动态操作类+注解灵活打标签 | 反射注解结合灵活高效实战

这是我参与更文应战的第29天,活动概略查看: 更文应战

前语

  • 之前两篇文章咱们别离介绍了反射和注解的入门,其间也有同学给到主张是从具体运用场景启航更简略了解精华!今日笔者就程序员结合下自己实践项目中运用到的功用!这儿算是抛程序员怎样学砖引玉了

功用需求

  • 针对一张表做一个表单查询功用!这个功用十分的简略没有技能难点无appearance非就是狗狗币咱们在写查询时注入条件写成动态条件判别!其他就没啥了

反射动态操作类+注解灵敏打标签 | 反射注解结合灵敏高效实战

  • 触及公司内部数据,这儿要害数据现已被我换掉了!
  • 除了查询以外,咱们还有生成数据googlespringcloud功用。结合对数据的管理咱们来看看怎样注解反射双管齐下

数据阐明

  • 首要数springboot面试题据存储在mongo中,查询是经过MongoT宫颈癌emplate来结束数据的查询
  • 存储的数据时刻数据是时刻戳,页面展现时需求格式化。这部分算法的有穷性是指由接口处理
  • 关于数据情况已查验未查验实践存储的是程序员是学什么专业1、2
  • 条件查询时现在是上面几种!每隔一段时刻需求依据运用频率及用户反响进行随意调度

实体界说

@Data
pu程序员是做什么的blic class DangersBook implements Serializable {
@TimeSe算法导论quence
@Ignore
@Id
@Query
private LongAPP id;
@DangersNo
@Ignore
@Query
@LikeQueappetitery
private Strappreciateing dangersNo;
@Ids
private String instance_id;
@DspringbootangersType
@Ids
private String app_id宫崎骏;
@Ids
@Query
@DangersEntId
@OrQuer算法的时刻复杂度取决于y
pspring是什么意思rivate String entId;
private String created_by;
@Query
@Ids
private String zuoyeleixing;
@Date
@Query
private String pizhunspring是什么意思kaishi;
@Date
@Query
private String pizhunjieshu;
@Upda算法剖析的意图是t算法剖析的意图是espringcloudItem(value = "已查验")
@Query
@OrQuery
private StrGoing yanshouStatuapproachs;
@Query
@Da程序员那么心爱te
@UpdateItem(vAPPalue = "")
private String finishTime;
private程序员计算器 String ji宫颈癌前期症状anweixiuxukappearezheng;
pgooglerivate String zuoyedengji;
@Query
@LikeQuery
private String zuoyeneirong;
/**
* @Des算法的有穷性是指criptioAPPn 用于判别是否应该生成编号Go
*/
@Ignore
@Query
private Striappetiteng createDangerNo;
private String laowubanzu;
@Query
pappreciateri程序员装逼代码vate String test;
@Query
private String interrupt;
@Query
@appstoreOrQuery
private String公积金 year;
}

注解阐明

  • 首要咱们需求先经过反射获取到DangersBook中的悉数特征!这是咱们对反射的第一处运用!实践上在项目中但凡需求写活特征的获取的都是经过反射进行获取结合注解进行特征过滤!

Timspringmvc的作业原理eSequence

  • 在生成数据是数据的仅有算法的时刻复杂度是指什么id往往都是后端自行生成的这样才干确保真springboot常用注解正的仅有!而TimeSequence注解就是对字段进行标注,这样咱们在程序中只需识别到特征中存在该注解就会进行仅有id生成
TimeSequence annotation = declaredField.getAnnotation(TimeSequence.cla程序员ss公积金);
if (annotation!=null) {
//雪花算法
long generatorId = Distr程序员客栈ibutedIDUtils.getInstance().getGeneratorId(1l, 2l, 3l);
declaredFieldspring.setAccessible(true);
declaredField.set(object, geappetiteneratorId);
}
  • 获取到TimeSequence之后咱们就可以经过雪花算法生成id然后经过特征spring是什么意思将生成的id赋值进去!

Ignore

  • 还有一种springcloud五大组件情况是有些数据咱们不能进springmvc的作业原理行任何操作,那么在反射中咱们经过注解进行获取来进行更新数据时就需求将这些数据过滤掉。Ignore就是这个效果
Ignore ignore = declaredField.getAnnotation(Ignore.class);
if (ignore != null) {
continue;
}

Query &a程序员薪酬一般多少mp; Date & LikeQuery&amAPPp;OrQuery

  • 这三个都是在查询是触及的。后边两个也是在Query根底上进行扩展的
com.ay.sdappreciateksmapproach.custom.components.expose.annatiospringmvc的作业原理n.Query queryField = declaredField.getAnnotation(com.ay.sdksm.custom.components.expose.annation.Query.class);
if (queryField != n狗狗币ull) {
//需求增加查询条件
try {
declaredField.setAccessible(true);
Object o = declaredField.get(dangersBook);
if (null !=springboot o&&!"".equals(o.toString())) {
String svalue = o.t程序员客栈oString();
Dat公积金e dateAnnotation = declaredField.getAnnotation(Date.class);
LikeQuery likeQuery = declaredField.getAnnotation(LikeQuerspringmvc的作业原理y.class);
if (dateAnnotation != null) {
String dateValue = svalue;
if (StringUtils.isEmpty(dateValue)) {程序员计算器
continue;
}
Strin宫颈癌g[] dateSplit = dateValue.split(",");
String start = dateSplit[0];
String end = start;
if (dateSplit.length >= 2) {
end = dateSplit[1];
}
criteria.and(declaredFi程序员一分钟毛遂自荐eld.getName(程序员薪酬一般多少)).gte(start).lte(end);
} else if(liSpringkeQuery != null){
Pattern pattern = Pattern.compile(String.format(".*%s.approach*程序员怎样学", svalue), Pattern.CASE_INSE枸杞NSITIVE);
criteria.and(declaredField.getName()).regex(pattern);app是什么意思
}else {
OrQuery o算法的有穷性是指rQuapproachery = declaredField.getAnnotation(OrQuery.class);
if (null != orQuGoery) {
St程序员怎样学ring[] split = svalue.split(",");
String start =程序员客栈 split[0];
String endspring是什么意思 = split[0];
if (split.length > 1) {
end = split[1];
}
criteria.and(declaredField.getName()算法的五个特性).in(start, end);
} else {
if (svalue.contains("$ne")&&a程序员怎样学mp; JsonUtiappstorels.getInst程序员需求什么学历ance().isJ程序员装逼代码son(svalue)) {
JSONObject jsonObject = JSONObject.parseObject(svalue);
String $ne = jsonObj程序员怎样学ect.getString("$ne程序员薪酬一般多少");
cspring面试题riteria.and(declaredField.getName()).ne($ne);
}else if(svalue.contains("$like")&& JsonUtils.getInsta宫崎骏nce().isJson(s算法是什么value)){
//模糊查询
JSONObject jso算法工程师学什么专业nO算法的有穷性是指bject = JSONObject.parseObjectSpring(svalue);
String $like = jsonObject.getStr程序员那么心爱ing("$like");
criteria.and(declaredField.getName()).is(String.format("/%s/",$l算法的有穷性是指ike));
} else {
Class<?> type = declaredField.getType();
if (type == Long.class) {
criteria.and(declaredField.getName()).i枸杞s(Long.valueOf(svalue));
} else {
criteria.and(declare程序员薪酬一般多少dField.getName()).is(svalue);
}
}
}
}
}
} catch (IllegalAccessException e) {
e.printStacspringcloudkTrace();
}
}
  • 首要需求合作Query程序员薪酬一般多少解标明需求对字段进行条件组装。当程序员薪酬一般多少遇到Date咱们就需求将条件值进行定制处理咱们约定的条件值Spring是已逗号距离的时刻段。这样咱们spring面试题就可以动态的支撑时刻点、时刻段的查询。
  • 然后遇到LikeQuery标明是模糊查询。
  • 还有google部分情况是取反查询!总归咱们悉数的需求都可以在注解Query根底后进行扩展。上面是初期版别其间没有经过规划表现出来就是有些if else荣誉代码!笔者这儿也仅是展现注解的运用场景。
  • 后续或者说读者有时刻可以自己依据规划方式中战略方式进行代码优化就会很简练易懂!关于战略方式可以参看这篇文章就够了

DangersNo

DangersNo annotation = declaredField.getAnnotation程序员那么心爱(DangersNo.class);spring面试题
if (annotation != null) {
//依据事务生成指定格式的数据I宫颈癌D;这儿比较杂乱。代码省掉。。。。。。
}算法是什么

注解总结

  • 总的来说咱们可以appetite依据自己不同的事务需求开宣告不同的注解标明不同的效果。然后在反射中悉数同Go人对待!当遇到指定的注解google时咱们就进行对应的事务开发!这点很适工程造价宜战略方式在代码中咱们也可以简化咱们的if else 。

反射运用场景

  • 上面注解的运用场景也可以springcloud五大组件了解成是反射程序员是做什么的的运用场景。可是那个算法是什么首要是说注解的。反射大多是在结构中运用的比较多,因程序员为结构需求高可调度性所以内部很多都是进行装备收效的。
  • 对于后端程序员来说Spring应该不会是很陌生的。在Spring中咱们常见的也是必备的两个技能知识点是IOC+AO程序员需求什么学历P。

IOC

  • IOC 依靠注入,在Spring中咱们需求哪个政策不再需求向传统方法那样New了,而是经过Spring的注入功用就可以轻松获取一个政策,这不仅仅是方法的改动更是对咱们操作的简化,咱们不在需求为新创建的一个政策进行杂乱的特征初始化了这些都被Spring结束了。他结束的首要程序员需求什么学历手段就是经过反射。在程序员客栈项目初始化时spring会依据反射获算法工程师取特征并进行特征填充!这是一个杂乱的进程咱们今日仅需牢记在项目初期会经过反射进行特征初application始化!在咱们运用到类的时分就可以直接经过类app是什么意思政策进行操作

Aspring面试题OP

  • AOP切面编程。你的项目中一定有日志功用,在每个接口处算法剖析的意图是都需求对接口进行记录包含入参出参现已其间耗时等基本信息。假设让你结束是否需求在每个当地进行开发。这种方法咱们可以了解成埋点操作。这种方法是不可取的。由于类似日志功用这种通用性的功用咱们无法在每一处进行开发这很是消耗时刻!
  • 在IOC的时分不仅仅是经过反射初始化特征还会生成署理政策。这个署理政策的生成进程笔者这儿是将它了解成一次反射生成的署理政策。不知道这儿了解是否正确?假设错误忘指出。

总结

  • 反射有的人说影响功用。这的确是影响功用,可是它行进咱们程序的灵敏性。我之前说过这事一个时刻和空间的问题!鱼和熊掌不可兼得
  • 注解存在任何一个结构中。但凡一个老到的结构必须有注解这样才干行进生产力

点赞,XDM

发表评论

提供最优质的资源集合

立即查看 了解详情