如何从从代理类中得到真正的类的classname

riso8371 2008-11-13 11:51:20
我用的Spring+hibnerate的后台架构

中间我有个动态的要获取Content的className,如"com.entity.Content"
但由于spring采用了代理类模式,结果我用下面的方法,得到了代理类的名字,后面多了一串东西,让我的程序就遇到了一些问题
object.getClass().getName = "com.entity.Content$$EnhancerByCGLIB$$b6a07584"

请问如何让ojbect得到真正的"com.entity.Content"
而不是"com.entity.Content$$EnhancerByCGLIB$$b6a07584"

...全文
589 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
cw550284 2008-12-31
  • 打赏
  • 举报
回复
java反射啊
nicholasmars 2008-12-24
  • 打赏
  • 举报
回复
这应该是Spring内部机制的问题。
笨办法倒是有一个,先得到完整的字符串,然后Split分割一下。
关注。。。
西瓜 2008-12-24
  • 打赏
  • 举报
回复
你拿到了className得地址啊
看看对象是数组还是集合还是什么样得
把值拿出来 就可以了

com.entity.Content$$EnhancerByCGLIB$$b6a07584
难道不是Content真正得对象吗?

前面都有前缀了 明显已经是Content对象了啊
berlou 2008-12-02
  • 打赏
  • 举报
回复
这个也是spring的一个缺点吧, 我一直认为spring应该做成编译时增强而不应该使用动态代理运行时增强。
aspectj也不好, 因为它污染了java的语法。二者优点结合一下应该比较好
riso8371 2008-12-01
  • 打赏
  • 举报
回复
加了分了,还没有人能想出来吗
ximenchuixuewang 2008-11-17
  • 打赏
  • 举报
回复
学习
riso8371 2008-11-17
  • 打赏
  • 举报
回复
问题是现在不能动以前的代码,要兼容....
tiyuzhongxin789 2008-11-17
  • 打赏
  • 举报
回复
将com.entity.Content和你的业务逻辑分开管理吧.别将业务放在你的域对象中.
riso8371 2008-11-17
  • 打赏
  • 举报
回复
...顶一下
riso8371 2008-11-13
  • 打赏
  • 举报
回复
这样的方法,我是准备没有办法再这样
而且这个方法有个BUG,代理类的机制变了,就有问题了
不知道hibernate是如何做到的,因为不管spring用了代理机制与否,hiberante都能识别出来
SylvanLiu 2008-11-13
  • 打赏
  • 举报
回复
先获得完整的字符串值,再进行处理
ZangXT 2008-11-13
  • 打赏
  • 举报
回复
用字符串截取获得第一个$$之前的串应该可以了吧。
真正的类名也没见用两个$$的
riso8371 2008-11-13
  • 打赏
  • 举报
回复
...最好能不改开源代码...比如Hiberante那种处理..
berlou 2008-11-13
  • 打赏
  • 举报
回复
overwrite spring的那个代理类。
riso8371 2008-11-13
  • 打赏
  • 举报
回复
现在东西都开发的差不多了,没办法去改变业务,让其抽象接口
再说,让每个对象去实现接口,工作量太大
scarlet365 2008-11-13
  • 打赏
  • 举报
回复
要是给这些对象抽出个接口.定义个获取ClassName的方法然后让这些对象实现这个接口呢?
让对象自己提供自己的ClassName.我觉得LZ不可避免的要修改代码.除非使用1楼企鹅大大截字符的方法.
riso8371 2008-11-13
  • 打赏
  • 举报
回复
我这个是处理是公共的,必需动态处理
用Spring的AOP去记录日志,所以继续麻烦大家想出好办法
scarlet365 2008-11-13
  • 打赏
  • 举报
回复
LZ将com.entity.Content和你的业务逻辑分开管理吧.别将业务放在你的域对象中.
单一职责..阿弥陀佛

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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