1.1 简化Java开发
Bean:
虽然spring使用Bean或者JavaBean来表示应用组件,但这并不意味着Spring组件必须遵循JavaBean规范。一个Spring组件可以是任何形式的POJO
依赖注入:
好处:松耦合
核心:
把接口作为参数注入,可以使类作用域该接口的任何实现类上
ref所接受的“bean”相当于传入的参数,相当于接口,因此在bean定义时的class属性可以是实现类
1.2 Bean容器
应用上下文
ClassPathXmlApplicationContext
从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源
FileSystemXmlApplicationContext
读取文件系统下的XML配置文件并加载上下文定义
XmlWebApplicationContext
BeanFactory加载bean的过程:(
Bean的生命周期)
- Spring对Bean进行实例化
- Spring将值和Bean的引用注入进Bean的属性
- 如果实现了BeanNameAware,将Bean的ID传递给setBeanName()接口方法
- 如果实现了BeanFactoryAware,调用setBeanFactory方法,将BeanFactory容器实例传入
- 如果实现了ApplicationContextAware,调用setApplicationContext()方法,引入上下文
- 如果实现了BeanPostProcessor,调用postProcessBeforeInitialization()方法
- 如果实现了Ini调理子能够Bean,调用afterPropertiesSet(),如果使用init-method声明了初始化方法,调用该方法
- 如果Bean实现了BeanPostProcessor,调用postProcessAfterInitialization()方法
- Bean准备就绪,可以被使用,驻留于应用上下文,直到该应用上下文被销毁
- 如果实现了DisposableBean接口,调用destroy()方法,如果bean使用destroy-method声明了销毁方法,调用该方法
1.3 Spring构成
1.3.1 Spring模块
spring的6大模块:
- Data access&integration:Transaction,JDBC,OXM,ORM,JMS
- Web and remoting:Web,Servlet,Portlet,struts
- AOP : AOP,Aspects
- Instrumentation : Instrument,Instrument,Tomcat
- Core Spring container : Beans,Core,Context,Expression,Context support
- Testing:test
1.3.2 Spring Portfolio
- Spring Web Flow:基于流程的绘画式web应用
- Spring Web Service:提供契约优先的webservice模型
- Spring Security
- Spring Integration:企业级应用交互
- Spring Batch:批处理应用
- Spring Social:社交网络扩展
- Spring Mobile:移动文本应用开发
- Spring Dynamic Modules :OSGi,现称为Gemini Blueprint
- Spring LDAP:基于模板的LDAP访问
- Spring Rich Client:富应用工具箱,swing
- Spring .Net:面向.Net
- Spring Flex:开发Flex应用(Adobe)
- Spring Roo:提供快速开发Spring应用的交互式环境
- Spring Extensions:社区驱动的Spring扩展项目
1.4 Spring新功能
1.4.1 Spring2.5新特性
2007年11月
*引入注解
- 使用@Autowired实现基于注解驱动的依赖注入,使用@Qualifier实现细粒度的自动装配
- 支持JSR-250注解,支持命名资源依赖注入的@Resource对生命周期方法支持的@PostConstruct和@PreDestroy
- 自动扫描使用@Component注解所标注的Spring组件
- 全新的基于注解驱动的Spring MVC编程模型
- 基于JUnit 4和注解的一个新的集成测试框架
其他:
- 支持Java 6 、JavaEE 5,涵盖JDBC4.0、JTA1.1、JavaMail1.4、JAX-WS2.0
- 通过Bean名字来编织切面的新的Bean命名切入点表达式
- 新的XML命名空间:配置应用上下文细节的context、配置消息驱动Bean的jms
- 支持在SqlJdbcTemplate中使用命名参数
1.4.2 Spring3.0新特性
- Spring MVC全面支持Rest、REST风格
- 新的表达式语言
- SpringMVC新注解@CookieValue、@RequestHeader
- 一个新的XML命名空间
- 支持基于JSR-302注解的声明式校验
- 支持新的JSR-330依赖注入规范
- 通过注解驱动声明异步和调度方法
- 一个新的注解驱动的配置模型
- Spring Web Service项目的OXM功能已被迁移到Spring框架核心
*Spring 3.0要求Java 5以上,不再支持Java1.4
1.4.3 Spring Portfollo新特性
- Spring Web Flow 2.0
- Spring JavaScript、Spring Facesitting
- Acegi Security,作为Spring Security2.0正式发布
第一章总结:
Spring的目的:简化企业级Java开发,促进代码松散耦合
实现方式:依赖注入,AOP