共计 1856 个字符,预计需要花费 5 分钟才能阅读完成。
欢迎大家关注我的微信公众号,一起探讨 Java 相关技术
使用 Spring 的目的
Spring 是为了解决企业级应用开发的复杂性而创建的,使用 Spring 可以让简单的 JavaBean 实现之前只有 EJB 才能完成的事情。
Spring 如何降低 Java 开发的复杂性
最小侵入编程
通过面向接口和依赖注入实现松耦合
基于编程惯例和切面进行声明式编程
通过模板减少样板式代码
Spring 容器
在 Spring 应用中,不再由对象自行创建或管理它们之间的依赖关系;Spring 容器负责创建对象、装配对象、配置它们并管理它们的整个生命周期。
容器是 Spring 框架的核心,是依赖注入和切面的基础,其自带了多个容器实现,这多个实现可以归类为两种不同的类型:
Bean 工厂,提供基本的依赖注入支持
ApplicationContext,基于 Bean 工厂构建,提供应用框架级别的服务
ApplicationContext 在实际的应用中更广泛、更受欢迎。
应用上下文
Spring 自带了多种类型的应用上下文,其中最常用的几种为:
AnnotationConfigApplicationContext:从一个或多个基于 Java 的配置类中加载 Spring 上下文
AnnotationConfigWebApplicationContext:从一个或多个基于 Java 的配置类中加载 Spring Web 应用上下文
ClassPathXmlApplicationContext:从类路径下的一个或多个 xml 配置文件中加载 Spring 上下文
FileSystemXmlApplicationContext:从文件系统下的一个或多个 xml 配置文件中加载 Spring 上下文
XmlWebApplicationContext:从 Web 应用下的一个或多个 xml 配置文件中加载 Spring 上下文
Bean 的生命周期
Spring 实例化 Bean
Spring 将值和 Bean 的引用注入到 Bean 对应属性中
如果 Bean 实现了 BeanNameAware 接口,Spring 将 Bean 的 id 传给 setBeanName() 方法
如果 Bean 实现了 BeanFactoryAware 接口,Spring 调用 setBeanFactor() 方法,将 BeanFactory 实例传入
如果 Bean 实现了 ApplicationContextAware 接口,Spring 调用 setApplicationContext() 方法,将 Bean 所在的应用上下文传入
如果 Bean 实现了 BeanPostProcessor 接口,Spring 调用 postProcessBeforeInitialization() 方法
如果 Bean 实现了 InitializingBean 接口或使用了 init-method 声明了初始化方法,Spring 调用 afterPropertiesSet() 方法
如果 Bean 实现了 BeanPostProcessor 接口,Spring 调用 postProcessAfterInitialization() 方法
Bean 初始化完毕,可以进行使用,其将一直在应用上下文中驻留,直到该应用上下文销毁
如果 Bean 实现了 DesposableBean 接口或使用了 destroy-method 声明了销毁方法,Spring 将调用 destroy() 方法
Spring 核心模块
Spring 的模块依据其所属的功能可以划分为 6 类。
Spring 核心容器
core:Spring 核心
context:Spring 容器
beans:Spring 的 Bean 工厂
expression:Spring 表达式语言
context-support:Spring 容器辅助支撑
Spring AOP
aop:面向切面编程
aspectJ:切面注解相关
数据访问与集成
JDBC:数据库访问相关
JMS:消息相关
ORM:对象关系映射模型相关
OXM:XML 映射模型相关
transaction:事务相关
Messaging:消息服务相关
Web 与远程调用
Web MVC:Spring 提供的 MVC 框架
Web Servlet:Servlet 相关
WebSocket:Socket 编程相关
Instrumentation
使用场景有限,暂时不需要了解
Test
Spring 提供的测试框架
总结
本文从总的方向上对 Spring 相关的内容进行了介绍,并不涉及任何细节的东西。主要涉及 Spring 的优势、Spring 容器、Spring 应用上下文、Spring 生命周期、Spring 项目的模块化。在接下来的文章中,将会通过示例的方式展示 Spring 每一项功能的使用。