反射机制

本文深入探讨Java反射机制的应用,如动态创建对象、调用方法及存取属性值等,同时解析Annotation、Chain of Responsibility及Singleton模式的原理与实践,助力开发者提升编程技巧。

本文内容如有错误、不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢。

作用

  • 允许从类名字符串创建对象
    • JDBC驱动中的Class.forName(驱动类型名)就是一个最常见的例子
  • 允许选择对象的构造函数创建对象
  • 允许通过方法的字符串名称以及参数类型调用方法
  • 允许通过属性的字符串名称存取属性的值

反射机制的使用

  • 通过对前一阶段多种不同的语句类型的解码,可以发现一定规律:
    • 对于简单语句(parametric sentences),都是将语句分段之后,按照每段的不同类型进行解析,解析之后,保存属性值
    • 对于封装语句(encapsulation sentences)
      • 将语句分段,提取各个段的内容
      • 等待多语句组完成或超时未完成时,将有效载荷部分解码为比特数组
      • 将比特数组按照每个属性需要的比特位数以及不同的数据类型将比特数组编码为需要的类型
      • 设置属性的值
  • 编码部分的工作同样存在类似的规律
  • 一些额外需要考虑的问题
    • 属性必须保证顺序
    • 有些属性是必须有的,如果语句中不存在,需要终止解码
    • 有些语句中,有多组信息,例如GSV:http://www.gpsinformation.org/dale/nmea.htm#GSV

Annotation

  • Java支持对类(接口)、方法、属性加上annotation
  • 每个annotation可以定义自己的属性,例如序列号、属性是否必须存在等等
  • 因此可以通过annotation,将数据对象的属性进行标注
  • 在解码时,获取需要的属性,根据不同的属性类型进行解码,通过反射设置属性值

Chain of Responsibility模式

  • 责任链模式由一系列的command对象组成,在进行处理时,按照command对象的顺序逐步处理
  • 可根据command对象的执行情况决定终止执行或继续执行
  • Command模式决定了当执行一个command的时候,只能够完成一个小任务,但是当需要完成一系列任务时,需要使用责任链模式
  • 典型的责任链模式
    • Java Servlet的Filter,包括前处理Filter和后处理Filter,可以根据Filter的返回结果决定是否继续执行,例如通过添加权限处理的Filter,过滤对权限外的页面或操作的请求
    • MFC的消息处理模式,每个窗体对传来的消息进行处理,消息处理结束后,可根据处理结果继续处理或终止
    • Netty的channel处理,使用了类似于servlet filter的方式,只是更加巧妙

Singleton模式

  • 单例模式是在程序需要且仅需要创建一个对象时使用,单例模式决定了该类只能被实例化出一个对象,不能同时创建多个对象
  • 单例模式在Java中通常使用IoC框架来实现,例如Spring IoC中通过设置scope=singleon实现,而不通过代码实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值