完整教程:复习博客:Spring
复习博客:Spring
Spring的核心
Spring框架的核心是IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)。
IOC(控制反转):
- 概念:将对象的创建、依赖管理等传统上由程序自身控制的权力,反转给Spring容器来管理。程序不再负责对象的创建和依赖的查找,而是由容器根据配置(XML、注解或JavaConfig)来创建对象并注入其依赖。
- 好处:降低了组件之间的耦合度,提高了代码的可测试性和可维护性。
- 实现方式:依赖查找(Dependency Lookup)和依赖注入(Dependency Injection, DI)。依赖注入是更常用的方式,包括构造器注入、Setter注入和字段注入。
AOP(面向切面编程):
- 概念通过:将应用程序中的横切关注点(如日志、事务管理、安全等)从业务逻辑中分离出来,通过“切面”的方式进行模块化。这些横切关注点能够被集中管理和重用,避免了代码的重复和散落。
- 核心概念:
- 切面 (Aspect):横切关注点的模块化,包含通知和切入点。
- 通知 (Advice):切面在特定连接点执行的动作,如前置通知、后置通知、环绕通知、异常通知、返回通知。
- 连接点 (Join Point):程序执行过程中许可插入切面的点,如手段调用、异常抛出等。
- 切入点 (Pointcut):匹配连接点的表达式,定义了通知在哪些连接点执行。
- 目标对象 (Target Object):被一个或多个切面所通知的对象。
- 织入 (Weaving):将切面应用到目标对象并创建新的代理对象的过程,许可在编译时、类加载时或运行时进行。
- 实现方式:Spring AOP默认使用动态代理实现,如果目标对象完成了接口,则使用JDK动态代理;如果目标对象没有建立接口,则运用CGLIB代理。
Bean的生命周期
Spring Bean的生命周期是指一个Bean从创建到销毁的整个过程。主要步骤如下:
- 实例化 (Instantiation):Spring容器根据配置(XML、注解等)创建Bean的实例。
- 属性填充 (Populate Properties):Spring容器对Bean的属性进行依赖注入。
- BeanNameAware接口:如果Bean实现了
BeanNameAware
接口,会调用setBeanName()
方法,传入Bean的ID。 - BeanFactoryAware接口:如果Bean实现了
BeanFactoryAware
接口,会调用setBeanFactory()
方法,传入BeanFactory
实例。 - ApplicationContextAware接口:如果Bean实现了
ApplicationContextAware
接口,会调用setApplicationContext()
方法,传入ApplicationContext
实例。 - BeanPostProcessor接口 (前置处理):如果Bean实现了
BeanPostProcessor
接口,会调用postProcessBeforeInitialization()
方法。 - InitializingBean接口:如果Bean实现了
InitializingBean
接口,会调用afterPropertiesSet()
方法。 - 自定义init方法:如果Bean配置了
init-method
属性,会调用指定的初始化方法。 - BeanPostProcessor接口 (后置处理):如果Bean实现了
BeanPostProcessor
接口,会调用postProcessAfterInitialization()
方法。 - 利用中 (In Use):Bean已准备就绪,可以被应用程序利用。
- DisposableBean接口:如果Bean实现了
DisposableBean
接口,会调用destroy()
方法。 - 自定义destroy方法:如果Bean配置了
destroy-method
属性,会调用指定的销毁方法。
Spring MVC的工作流程
Spring MVC是Spring框架的一个模块,用于构建Web应用程序。其工作流程如下:
- 客户端发送请求:用户向服务器发送HTTP请求。
- DispatcherServlet接收请求:
DispatcherServlet
(前端控制器)是Spring MVC的核心,负责接收所有请求。 - HandlerMapping查找处理器:
DispatcherServlet
根据请求URL,通过HandlerMapping
查找能够处理该请求的Handler
(处理器,通常是Controller中的方法)。 - HandlerAdapter执行处理器:
DispatcherServlet
找到Handler
后,通过HandlerAdapter
执行Handler
。Handler
执行完成后,返回一个ModelAndView
对象。 - ViewResolver解析视图:
DispatcherServlet
将ModelAndView
交给ViewResolver
(视图解析器),ViewResolver
根据逻辑视图名解析出真正的视图(如JSP页面、HTML页面)。 - 视图渲染:视图渲染器将模型信息填充到视图中,生成最终的响应内容。
- 响应客户端:
DispatcherServlet
将生成的响应返回给客户端。