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

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


小弟这就没懂了。。为何这里说利用了反射的操作机制啊。。。有点迷糊。求大神指点一二。
...全文
153 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
求助。 求助求助求助
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-10-28 09:38
社区公告
暂无公告