下载Spring源码用来学习
直接使用github的svn下载功能:
https://github.com/spring-projects/spring-framework.git/tags/v3.0.5.RELEASE/org.springframework.jms
https://github.com/spring-projects/spring-framework/branches/3.0.x/org.springframework.aspects
Srping的优点
- 简化企业应用开发的复杂性。
- 使用IOC和AOP来统一了应用对象的查找、配置、和生命周期管理,分离了业务和基础服务中的不同关注点。开发人员可以基于简单Java对象轻松地实现与EJB同样强大的功能。
- 在业务层提供了全面的解决方案,包括:数据库持久化支持、声明式事务、远程服务访问,以及JMS,Mail,定时等多种企业服务。
- 在Web层提供了MVC框架,并且可以集成各种Web框架或者试图技术(JSP,Velocity)
- IOC帮我们省略了大量的定制工厂和系统配置类
- Hibernate帮我们省略了大量的对象/关系映射,数据库连接代码。 二者整合有省去了大量的对于操作Hibernate所需要的代码
Spring的设计理念
- 好的设计比实现技术更重要,
- 模型上接口松散耦合,
- 代码应该容易被测试
Spring核心特性
IOC, 不是类去找其依赖的对象,而是容器把依赖注入给他。
AOP, 两个图很好的说明了, 一个是多线图,一个是分层图
模板, 最典型的是数据库连接模板
整体结构
核心容器:
- Factory 负责Bean创建和配置IOC-core and bean
- Context: 在Core-bean基础上提供一些框架的支持,比如国际化,资源加载,JMX, 事件传播等
- EL 是spring的扩展语言可以不依赖于Spring容器直接调用, ExpressionParser parser = new SpelExpressionParser();通常的用法如下:
Expression exp = parser.parseExpression("'Hello World'.bytes.length");
此外Spring的占位符等使用了它例如:
<bean class="mycompany.RewardsTestDatabase">
<property name="databaseName"
value="#{systemProperties.databaseName}"/>
<property name="keyGenerator"
value="#{strategyBean.databaseKeyGenerator}"/>
</bean>
DA/I
JDBC 解决了JDBC大量样板代码以及不友好的JDBC错误码
ORM 集成了流行的关系映射API:JPA,Hbernate, iBatis等,spring可以让这些框架跟spring其他的特性比如声明式事务管理特性相结合。
OXM 提供了XML/对象的映射模板, 简化JAXB。
JMS 异步消息的支持
通过AOP支持事务
WEB
提供web功能集成:文件上传,面向web的Context
对于Servlet,提供MVC
对于Structs提供整合
AOP
面向切片,与aspectJ整合
Spring系统的其他部分:
Spring Web Flow: 基于流程的会话式Web应用(购物车),
Spring Web Service
Spring Security
Spring Integration: 应用集成模式
Spring Batch 批处理
Spring DM
版本更新:
2.5 新特性:
- 对注解的支持
- 内嵌AspectJ
- SqlJdbcTemplate使用命名参数
3.0 新特性
- Spring MVC支持Rest
- 更多的注解支持
下面是对源代码的一些分析和问题。
spring asm在core.java中有实现,跟spring-asm中的会冲突。
spring的schmel文件是放在beans.jar的xml.factory中的,默认回去classpath中找,如果没有会报错