`
jiwenke
  • 浏览: 397342 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
4ee69929-b8e1-3eb5-bbca-157d075d6192
Spring技术内幕——深...
浏览量:181829
D1c226f7-74e9-3ec4-a15b-18a45ccd88c5
随笔:Spring与云计算...
浏览量:25554
社区版块
存档分类
最新评论

Spring源代码分析的PDF版本发布

阅读更多
方便大家阅读,请多留言,多指正!
分享到:
评论
50 楼 judyfun 2015-03-09  
  太厉害了。。。大牛崇拜
49 楼 zhoupuyue 2011-10-27  
佩服佩服!
48 楼 zeyonq 2011-09-01  
感谢分享!
47 楼 wupuyuan 2011-08-30  
多谢分享!
46 楼 luey 2011-07-19  
感谢楼主分享
45 楼 asm 2009-03-17  
真是谢谢楼主啊,最近在看spring,
44 楼 szboy 2009-03-15  
得好好看下分析了,Spring还不是很熟
43 楼 weidewei 2009-02-02  
好东西!收藏!!!
42 楼 ybbid 2009-01-30  
感谢LZ,分析的不错.
41 楼 enigma1228 2009-01-10  
很好的东西啊,正想看看呢~~~多谢了!
40 楼 leeldy 2009-01-06  
顶了先。。。
39 楼 ytl 2009-01-03  
真的太感谢LZ啦
38 楼 sunshineparasol 2008-12-31  
37 楼 yxw820816 2008-12-24  
多谢楼主,我自己琢磨总是有很多地方不明白,看了楼主的文章,豁然开朗,听君一席话,胜读十年书啊
36 楼 evil850209 2008-12-07  
好人呀,谢谢楼主

35 楼 hailang43 2008-12-06  
谢谢楼主分享
34 楼 caiceclb 2008-12-06  
lz够细致,源码分析可不容易
33 楼 hugjchina 2008-12-05  
非常感谢贡献!
32 楼 peachming 2008-12-05  
thanks a lot for shareing
31 楼 netfork 2008-12-05  
jiwenke 写道
引用
比如,目标对象的构造函数的参数也是一个没有默认构造函数的类时,我们为了将这个类实例化,还需要进一步对这个参数类进行反射,取出其构造方法的参数类型(是什么类),如果不幸,这个类也没有默认构造函数,我们可能还需要进一步反射它的构造函方法的参数类型,...直到我们找到一个存在默认构造函数的类或只是一个接口时,实例化它(接口的话,我们需要借助于CGLIB实例化,非接口应该无所谓),然后一步一步再往前逐一实例化之前没法实例化的类,最终才能够完成对目标对象参数的实例化。
但是,如果在实例化各个参数的参数的过程中,最终一个参数既没有实现接口,也没有默认构造函数时,就完蛋了,因为最后的这个参数,我们没法实例化他,这样,之前的一系统参数,我们也无法实例化,最终,对于目标对象的参数,我们没法给他构造出实实在在的对象,于时,目标对象类的子类对象,我们是无法生成的。整个代理过程失败。


我想如果只有一层代理的话,没有这个逐层的过程啊。你说的参数对象实例话是应该由依赖注入来完成的,他不见得是用CGLIB来实现,如果是正常的依赖注入的话,可以使用类装载器直接实例话就可以了。当然如果参数也是CGLIB的代理类的话,另当别论。



~~~~
由于我对自己的java水平也没多少信心,所以不知道我所理解的不可行的地方到底对不对。
楼主看着帮忙分析一下吧。

目的:实例化子类,也就是生成子类的对象。
拥有资源:只有目标对象,当然这个目标对象是一个没有默认构造方法的类的对象。
具体的步骤:
1、利用目标对象,借助于CGLIB生成其子类。
  目前来讲,CGLIB应该只是照葫芦画瓢,并没有再给这个子类添加一个默认构造方法,仅仅是覆盖了一下目标对象类的构造函数。其实,我个人认为,CGLIB增加一个可以自动强制为子类添加默认构造方法应该不算难事,但是目前来讲,我想CGLIB肯定没有提供这种生成子类的方法,否则Spring的这个aop失败的情况就不会有了。
2、实例化生成的子类。
  由于子类的构造方法也是带参数的,如果想用实例化他的话,必须要提供参数对象,但是,此时参数对象并不能拿到啊。因为唯一的资源“目标对象”的构造方法的参数是包在其对象里的,并没有提供get方法,我们拿不到的(这点,其实也是构造函数注入的初衷,就是被注入的东西不可变),于是,我想我们还必须想法搞到子类构造方法的参数的对象,这样,就有了我上面的关于反复反射直到能找到能生产对象的那一刻,才能回过头来,把所有的对象给实例化出来。
  没有默认构造方法的类,要想实现实例化,我个人的知识范围是需要提供构造函数参数对象的。如果有其他技巧可以在没有参数对象的情况实例化出没有默认构造函数的类的对象,我想,确实就没必须反复反射,去找那个根对象了。

  跟楼主讨论问题,引发了我很多的思考,真的很爽,也加深了认识。谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics