当前位置:  开发笔记 > 编程语言 > 正文

Spring Framework和其他IoC容器的内部结构

如何解决《SpringFramework和其他IoC容器的内部结构》经验,为你挑选了1个好方法。

我一直在使用spring一段时间,但我总是想知道它是如何工作的,更具体地说,它们如何加载和编织只用接口或@annotation标记的bean /类.

对于xml声明,很容易看出spring如何预处理我的bean(它们是在spring读取的xml上下文中声明的),但是对于仅标注注释的类,我看不出它是如何工作的,因为我没有将任何代理传递给jvm左右.

我相信有一些Java/JVM钩子允许你通过某种标准预处理类,但我无法在文档上找到任何东西.

有人能指点我一些文件吗?这与java.lang.instrument.ClassFileTransformer API有关吗?



1> Jevgeni Kaba..:

实际上,默认情况下,Spring既不对XML-也不对注释配置的bean进行任何字节码后处理.相反,相关的bean被包装到动态代理中(参见例如 java.lang.reflect.ProxyJava SDK中).动态代理包装您使用的实际对象并拦截方法调用,允许应用AOP建议.不同之处在于代理本质上是由框架创建的新的人工类,而编织/字节码后处理会改变现有的类.如果不使用您提到的Instrumentation API,后者是不可能的.

至于注释,tag 的实现将使用Spring注释扫描所有类的类路径,并为它们创建Spring元数据占位符.之后,它们被视为通过XML配置(或者更具体地说两者都被视为相同).

虽然Spring本身不进行字节码后处理,但是如果代理不满足你的话,你可以配置应该与Spring一起工作的AspectJ编织代理.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有