关于Java中反射机制在表达式语言中的运用

Wangqyoho 2015-10-28 09:38:04
反射机制,在我的理解,就是通过一个对象,获得这个类的信息,从而获得这个类的属性、方法等等。
小弟今天在看表达式语言(EL)的时候,看到书上说:
“$(pageContext.request.remoteAddr)
表达式语言中更多是利用了反射的操作机制,在通过表达式的内置对象调用方法时,都是以调用getXxx()或isXxx()形式的方法居多。


小弟这就没懂了。。为何这里说利用了反射的操作机制啊。。。有点迷糊。求大神指点一二。
...全文
210 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wangqyoho 2015-10-30
  • 打赏
  • 举报
回复
引用 2 楼 hqshaozhu 的回复:
因为el表达式在获取值时都是只提供对象的属性名,比如request.name,但是JavaBean的属性都是private的,外部没法直接访问,所有你直接request.name肯定是无法直接获取对象的,所以就需要调用getName()方法,那么当给你一个对象,你如何调用这个对象的某一个方法呢?显然是使用反射机制,通过Class获取指定名称的Method,然后调用Mthod的invoke()方法执行对应的Method获取返回值。
可是通过类对象以及反射机制调用方法不是都应该是“对象名.getClass()”获得class对象之后再找到方法再invoke吗?这里也没有getClass呀。。。
lizhenlzlz 2015-10-30
  • 打赏
  • 举报
回复
反射就是通过名称获取类的相关信息吧
少主无翼 2015-10-30
  • 打赏
  • 举报
回复
是的
少主无翼 2015-10-30
  • 打赏
  • 举报
回复
引用 6 楼 WangQYoho 的回复:
引用 5 楼 hqshaozhu 的回复:
[quote=引用 4 楼 WangQYoho 的回复:] [quote=引用 2 楼 hqshaozhu 的回复:] 因为el表达式在获取值时都是只提供对象的属性名,比如request.name,但是JavaBean的属性都是private的,外部没法直接访问,所有你直接request.name肯定是无法直接获取对象的,所以就需要调用getName()方法,那么当给你一个对象,你如何调用这个对象的某一个方法呢?显然是使用反射机制,通过Class获取指定名称的Method,然后调用Mthod的invoke()方法执行对应的Method获取返回值。
可是通过类对象以及反射机制调用方法不是都应该是“对象名.getClass()”获得class对象之后再找到方法再invoke吗?这里也没有getClass呀。。。
你看到的只是如何写,至于如何做是标签内部去控制的![/quote]哦哦。。好吧 其实我也是这么想的,只是不了解,所以心里很虚。谢谢啦! 还有一个问题,比如pageContext.request.remoteAddr,在这里,request,remoteAddr都是以属性的形式吗?[/quote] 是的
Wangqyoho 2015-10-30
  • 打赏
  • 举报
回复
引用 5 楼 hqshaozhu 的回复:
引用 4 楼 WangQYoho 的回复:
[quote=引用 2 楼 hqshaozhu 的回复:] 因为el表达式在获取值时都是只提供对象的属性名,比如request.name,但是JavaBean的属性都是private的,外部没法直接访问,所有你直接request.name肯定是无法直接获取对象的,所以就需要调用getName()方法,那么当给你一个对象,你如何调用这个对象的某一个方法呢?显然是使用反射机制,通过Class获取指定名称的Method,然后调用Mthod的invoke()方法执行对应的Method获取返回值。
可是通过类对象以及反射机制调用方法不是都应该是“对象名.getClass()”获得class对象之后再找到方法再invoke吗?这里也没有getClass呀。。。
你看到的只是如何写,至于如何做是标签内部去控制的![/quote]哦哦。。好吧 其实我也是这么想的,只是不了解,所以心里很虚。谢谢啦! 还有一个问题,比如pageContext.request.remoteAddr,在这里,request,remoteAddr都是以属性的形式吗?
少主无翼 2015-10-30
  • 打赏
  • 举报
回复
引用 4 楼 WangQYoho 的回复:
引用 2 楼 hqshaozhu 的回复:
因为el表达式在获取值时都是只提供对象的属性名,比如request.name,但是JavaBean的属性都是private的,外部没法直接访问,所有你直接request.name肯定是无法直接获取对象的,所以就需要调用getName()方法,那么当给你一个对象,你如何调用这个对象的某一个方法呢?显然是使用反射机制,通过Class获取指定名称的Method,然后调用Mthod的invoke()方法执行对应的Method获取返回值。
可是通过类对象以及反射机制调用方法不是都应该是“对象名.getClass()”获得class对象之后再找到方法再invoke吗?这里也没有getClass呀。。。
你看到的只是如何写,至于如何做是标签内部去控制的!
Usher丶AckMan 2015-10-29
  • 打赏
  • 举报
回复
少主无翼 2015-10-29
  • 打赏
  • 举报
回复
因为el表达式在获取值时都是只提供对象的属性名,比如request.name,但是JavaBean的属性都是private的,外部没法直接访问,所有你直接request.name肯定是无法直接获取对象的,所以就需要调用getName()方法,那么当给你一个对象,你如何调用这个对象的某一个方法呢?显然是使用反射机制,通过Class获取指定名称的Method,然后调用Mthod的invoke()方法执行对应的Method获取返回值。
Wangqyoho 2015-10-29
  • 打赏
  • 举报
回复
求助。 求助求助求助

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧