目的

可以屏蔽掉不同类的区别, 标记某些属性的不同从而对这些属性统一处理

例子代码

最近上海漫展一位身着大胆的女孩去报警, 因为自己身着 jk 制服参加漫展, 在地上做出各种姿势的时候走光被人偷拍, 并被职责污染了 jk 的圈子, 同时还有一则互联网届的新闻, 由于 sonar 服务器配置问题, 多个知名的互联网企业的代码都有泄露, 微软小米任天堂迪士尼等

https://v.qq.com/x/page/y3127ka8n1t.html

比如我们要初步描述这两个事件:

定义一个企业类:

@Data
@AllArgsConstructor
public class Enterprise {private String name;private String codeHubName;
}

定义一个 jk 女孩类:

@Data
@AllArgsConstructor
public class JkGirl {private String name;private String cloth;//安全裤,,,private String anquanku;
}

定义一个泄露的方法:

public void printLeakageInfo(Object object) {if(object instanceof Enterprise) {System.out.println("泄露了" + ((Enterprise)object).getCodeHubName());}else if(object instanceof JkGirl) {System.out.println("泄露了" + ((JkGirl)object).getAnquanku());}
}

使用:

public static void main(String[] args) {Enterprise enterprise =new Enterprise("微软","Windows代码库");JkGirl jkGirl =new JkGirl("jkGirl","白色上衣","黑色安全裤");printLeakageInfo(enterprise);printLeakageInfo(jkGirl);
}

输出:

泄露了Windows代码库
泄露了黑色安全裤

问题分析

printLeakageInfo 方法接收了不同的对象, 都要处理 if-else, 每次增加一种类型, 都需要增加一个 if-else, 这样的方法是很难维护的

属性注解模式

定义一个泄露的属性注解

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Leakage {}

在不同类的属性上打上标签:

@Data
@AllArgsConstructor
public class Enterprise {private String name;@Leakageprivate String codeHubName;
}
@Data
@AllArgsConstructor
public class JkGirl {private String name;private String cloth;//安全裤,,,@Leakageprivate String anquanku;
}

重新写输出方法:

Field[] declaredFields = object.getClass().getDeclaredFields();
for (Field declaredField : declaredFields) {if(!declaredField.isAnnotationPresent(Leakage.class)) {continue;}declaredField.setAccessible(true);System.out.println("泄露了" + declaredField.get(object));
}

重新调用这个方法的输出也是和上面一样的

课后作业

  1. 定义一个方法 printObject(Object object) 方法, 打印的时候只打印某些不敏感的属性
  2. 定义一个 @ExcelTitle 注解, 再定义一个 exportExcel(Object object) 方法用来导出带有表头的 excel

jk 漫展底裤泄露, 竟然是属性注解模式惹的祸相关推荐

  1. jk女孩被人偷拍知名企业代码泄露, 原来是属性注解模式(Attribute Annotation Pattern)兴风作浪

    目的 可以屏蔽掉不同类的区别, 标记某些属性的不同从而对这些属性统一处理 例子代码 最近上海漫展一位身着大胆的女孩去报警, 因为自己身着 jk 制服参加漫展, 在地上做出各种姿势的时候走光被人偷拍, ...

  2. spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式

    spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式   在类名,接口头上注解使用在 @JsonIgnoreProperties(value={"comid" ...

  3. java springMVC demo 事例 注解模式 例子 完整事例

                                          关于SpringMVC注解模式的个人小结梳理 现在一直在用springMVC+ibatis+oracle的框架进行开发  但 ...

  4. mybatis注解模式和混合模式

    1.引入mybatis-starter 2.配置application.yaml中,指定mapper-location位置即可 #配置mybatis规则 mybatis: # config-locat ...

  5. 整合MyBatis操作 注解模式 混合模式

    注解模式 先创建表 create TABLE city ( id int(11) primary key auto_increment, name VARCHAR(30), state VARCHAR ...

  6. dropwizard常用属性注解

    dropwizard框架默认使用的fastxml的jackson注解 一.两种情况下都有效的注解 1. @JsonIgnore @JsonIgnore 用来告诉 Jackson 在处理时忽略该注解标注 ...

  7. java属性注解_【java自定义注解1】java自定义注解-属性

    关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是 总结了两种方式,记录如下: 第一种:结合反射进行属性注入,代码如下: 1.定义一个注解: ...

  8. (0070)iOS开发之AVFoundation枚举属性注解

    转载: http://www.jianshu.com/p/5e56e35217bf 我们可以通过设置AVCaptureSession的一些属性来改变捕捉画面的质量 但是要注意:size相关的属性的时候 ...

  9. SpringBoot2.0 基础案例(13):基于Cache注解模式,管理Redis缓存

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.Cache缓存简介 从Spring3开始定义Cache和Cac ...

最新文章

  1. 线性代数:05 实对称矩阵与二次型
  2. git创建与管理远程分支
  3. jpa 测试_使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
  4. 《解剖PetShop》系列之一(转)
  5. recyclerview不显示_Android studio中导入v7包,使用recyclerview前的操作
  6. 通过js跳转url下载包含中文的文件乱码问题解决方案(java)
  7. 【Node学习】—Express框架的安装
  8. 中国加热棒行业市场供需与战略研究报告
  9. 三行代码实时追踪你的手,只要有浏览器就够了 | Demo·代码
  10. 排序系列 之 堆排序算法 —— Java实现
  11. 使用Doxygen + graphviz生成Unity 3d的UGUI类图
  12. 从FindBugs中学Java【四】
  13. mysql自带计划任务
  14. 专利CPC客户端保存文件出现Schema校验失败的解决方法
  15. php开源桌面会议系统,开源视频会议系统 OpenMeetings
  16. 一文搞懂经济数据中M0 M1 M2
  17. 微信保存图片提示失败_微信为什么保存不了图片
  18. blender用视频做背景渲染动画节点设置
  19. ubuntu 批量压缩图片
  20. 一个在职阿里6年的资深软件测试工程师的心声

热门文章

  1. buuoj Pwn writeup 166-170
  2. 图解原型链及其继承优缺点
  3. 计算机社团活动展望未来,社团展望未来寄语简短,如何写社团未来计划
  4. 抖音官方开始禁止这3种带货玩法,以后不要碰了
  5. CarSim2020 安装和操作001
  6. 英语语法——特殊结构
  7. 【modelarts】华为人工智能平台_modelarts平台系列教程2_自动学习_物品检测(2)
  8. 最新天气预报接口【2015-05-14改】
  9. 阿里巴巴测试开发岗P6面试题
  10. 论文《Learning both Weights and Connections for Efficient Neural Network》阅读笔记