Spring
- 基于POJO的轻量级和最小侵入性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码
依赖注入
- 创建应用对象之间协作关系的行为通常称为装配(wiring),这也是DI的本质。
- 对依赖进行替换的一个常用的方法就是在测试时候使用mock实现。
- Spring通过上下文装载bean的定义并把它们组装起来。Spring应用上下文全权负责对象的创建和组装。Spring自带了多种上下文的实现,它们之间的主要区别仅仅在于如何加载配置。
容器
容器是Spring框架的核心。容器并不只有一个,Spring自带了多个容器的实现,可以归结为两种不同的类型,
bean工厂是最简单的容器(由org.springframework.beans.factory.BeanFactory接口定义),提供基本的DI支持;应用上下文基于BeanFactory构建,并提供应用框架级别的服务(由org.springframework.context.ApplicationContext接口定义)。
由于BeanFactory过于低级,所以我们集中讨论ApplicationContext。
常见的context有:
- AnnotationConfigApplicationContext:从一个或多个基于java配置类中加载Spring上下文;
- AnnotationConfigWebApplicationContext:从一个或多个基于java配置类加载Spring Web上下文;
- ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文
- FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文
- XmlWebApplicationContext:从Web应用下的一个或多个xml配置文件中加载上下文定义
bean的生命周期
- 实例化
- 填充属性
- 调用BeanNameAware 的 setBeanName()方法()
- 调用BeanFactoryAware 的 setBeanFactory()方法
- 调用ApplicationContextAware 的 setApplicationContext()方法
- 调用BeanPostProcessor 的 预初始化方法
- 调用InitializingBean 的 afterPropertiesSet()方法
- 调用自定义的初始化方法
- 调用BeanPostProcessor的初始化后方法
- bean可以使用了
- 容器关闭
- 调用DisposableBean 的 destroy()方法
- 调用自定义的销毁方法
@PostConstruct
@PreDestroy
Spring模式
数据访问与集成
JDBC | Transaction | ORM |
---|---|---|
OXM | Messaging | JMS |
Web与运程调用
Web | Web servlet |
---|---|
Web portlet | WebSocket |
面向切面编程
AOP | Aspects |
---|
Instrumentation
Instrument | Instrument Tomcat |
---|
Spring核心容器
Beans | Core | Context | Expression | Context support |
---|
测试
Test |
---|
Spring配制的可选方案
隐式配置——隐式的bean发现机制和自动化装配
component scanning(组件扫描):Spring会自动发现上下文所创建的bean
使用@Component 注解,表明该类会作为组件类,并告知Spring要为这个类创建bean
不过组件扫描默认是不启用的,可以使用@CompomentScan注解在Spring中启用组件扫描。如果没有其他配置的话,该注解默认会扫描与配置类相同的包。
autowiring(自动装配):Spring自动满足bean之间的依赖
@Autowired注解可以用在set方法或者属性上。
如果不愿意使用@Autowired注解,可以考虑替换为@Inject。
显示配置
手动使用@bean注释进行配置
手动在xml文件中进行配置
spring依赖注入的三种方式
- 设值注入
- 构造注入
- 接口注入
SpringBean的三种创建方式
- 调用构造器创建Bean
- 调用工厂方法创建Bean