2008-10-23 79 views
20

我一直在使用的弹簧有一段时间了,但我一直想知道它是如何工作的,更具体的,他们是如何加载和编织只有一个接口或标记豆/班@注释内幕等IoC容器

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

我相信有一些Java/JVM挂钩,让您预处理类的某种标准,但我没能发现任何东西的文档。

有人可以指点我一些文档吗?这与java.lang.instrument.ClassFileTransformer API有关吗?

回答

28

实际上,默认情况下,Spring不会为 做任何字节码后处理 既不用于XML-也不 注释配置的bean。相反 相关咖啡豆包装成动态 代理(见例如 java.lang.reflect.Proxy在 的Java SDK)。动态代理包装使用 实际对象和拦截 方法调用,允许应用AOP 建议。区别在于代理实质上是由框架创建的新的人造类,而编织/字节代码后处理则改变了现有的类。如果不使用你提到的Instrumentation API,后者是不可能的。

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

虽然Spring没有做字节码后处理本身可以配置应该只是与Spring很好,如果代理不符合你的AspectJ织剂。

1

The Spring Framework download与源代码捆绑在一起,因此您可以自行在代码中(在src文件夹内)找到一个高峰来找出答案。

The reference manual也很长(588页,如果你下载它as a PDF)。

+3

谢谢,但我一直在寻找的不是潜入春源的方式......但无论如何,PDF没有提到春天的内部。 – 2008-10-23 18:24:02

+0

我不明白为什么这是downvoted! – 2014-11-14 21:35:30