原文:http://chenchh.iteye.com/blog/675701
Spring 框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块。这些模块分为Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和测试部分,如下图所示:
Core Container :
Core Container(核心容器)包含有Core、Beans、Context和Expression Language模块。
Data Access/Integration :
Data Access/Integration层包含有JDBC、ORM、OXM、JMS和Transaction模块。
Web :
Web层包含了Web、Web-Servlet、Web-Struts、Web-Porlet模块。
AOP和Instrumentation
AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现,它让你可以定义,例如方法拦截器和切点,从而将逻辑代码分开,降低它们之间的耦合性。利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中,这有点像.net中的attribute的概念。
Aspects模块提供了对AspectJ的集成支持。
Instrumentation模块提供了class instrumentation支持和classloader实现,使得可以在特定的应用服务器上使用。
Spring在JVM代理库spring-agent.jar中使用InstrumentationSavingAgent来保存由JVM提供的Instrumentation接口的当前实例。DefaultContextLoadTimeWeaver将会自动检测跟应用环境匹配得最好的LoadTimeWeaver实例。表6-2显示了不同环境下的LoadTimeWeaver实现。
LoadTimeWeaver的实现
LoadTimeWeaver |
环境 |
InstrumentationLoadTimeWeaver |
JVM以Spring的Instrumentation SavingAgent开始(使 用-javaagent: $LIB/spring-agent.jar) |
WebLogicLoadTimeWeaver |
BEA WebLogic 10或更高版 本应用服务器上运行的LoadTime Weaver实现类 |
GlassFishLoadTimeWeaver |
工作在GlassFish V2应用服务器上 |
OC4JLoadTimeWeaver |
Oracle 10.1.3.1或更高版本应 用服务器上运行的LoadTime Weaver实现类 |
ReflectiveLoadTimeWeaver |
跟TomcatInstrumentable ClassLoader一起使用,在 Tomcat servlet容器和默认的 LoadTimeWeaver实现中提供加载时织入 |
SimpleLoadTimeWeaver |
只用于测试的LoadTimeWeaver 实现(这里“只用于测试”的 意思是它在新创建的ClassLoader 上进行必要的织入转换) |
无论使用哪种策略,意识到加载时织入使用的是AspectJ而不是@AspectJ是很重要的,你可能在看过代码清单6-74中代码后会这么想。这意味着我们不能使用bean()切入点的@AspectJ支持。
Test
Test模块支持使用JUnit和TestNG对Spring组件进行测试。