Spring核心框架(IoC、AOP)
一、Spring框架概述Spring框架是一个开源的Java企业级应用开发 框架由Rod Johnson于2003年首次提出。它通过提供全面的基础设施支持简化了Java企业级应用的开发。Spring的核心特性包括依赖注入DI和面向切面编程AOP这两大特性使得应用程序的组件更加松散耦合代码更加模块化易于测试和维护。二、Spring核心模块1. Spring Core Container核心容器这是Spring框架最基础的部分包含以下关键组件BeanFactorySpring IoC容器的基本实现负责管理Bean的生命周期和依赖关系。ApplicationContextBeanFactory的增强版提供了更多企业级功能如国际化、事件传播、资源加载等。Bean Definition描述Bean的配置元数据包括类名、作用域、属性值、依赖关系等。2. Spring AOP面向切面编程AOP模块提供了面向切面编程的实现允许开发者将横切关注点如日志、事务、安全从业务逻辑中分离出来。主要组件包括切面Aspect横切关注点的模块化通常是一个类。连接点Join Point程序执行过程中的某个特定点如方法调用或异常抛出。通知Advice在特定连接点执行的动作包括前置通知、后置通知、环绕通知等。切入点Pointcut匹配连接点的表达式用于确定哪些连接点需要应用通知。三、IoC控制反转1. IoC容器工作原理IoC控制反转是Spring框架的核心设计原则。传统编程中对象自己创建和管理依赖对象而在IoC模式中容器负责创建和管理对象并将依赖注入到对象中。这种模式实现了控制权的反转降低了组件间的耦合度。2. Bean的生命周期Spring Bean的生命周期包括以下阶段实例化、构造器实例化 通过无参构造器方法创建必须要有无参构造方法否则创建失败静态工厂实例化 定义静态工厂类类中定义静态方法该静态方法返回实例化的bean对象实例化工厂实例化 定义工厂类类中定义普通方法方法返回实例化的bean对象属性赋值容器注入Bean的依赖属性。初始化调用初始化方法如PostConstruct、init-method。使用Bean处于就绪状态可供应用程序使用。销毁容器关闭时调用销毁方法如PreDestroy、destroy-method。3. 依赖注入方式1.手动注入set方法实现注入 属性字段要有set方法通过该属性的set方法设置属性字段的值构造器实现注入通过构造器形参设置属性值问题无法解决循环依赖解决循环依赖--set方法静态工厂注入实例化工厂注入2.自动注入重点1Resource默认根据bean标签的id属性值查找属性字段名和bean里的id属性值相等如果属性名称未找到则会根据类型查找默认利用set方法实现注入可以提供set方法也可以不提供注解可以声明在属性字段上也可以放在set方法上;可以设置name属性name属性必须与bean标签上的id属性值一样设置name无法根据类型查找当注入的是接口时如果有多个实现类则需要使用name属性2Autowired默认根据类型查找与属性字段名无关可以提供set方法也可以不提供注解可以声明在属性字段上也可以放在set方法上;可与Qualifier结合使用值与bean标签的id属性值对应开启扫描1Component 任意类2Repository Dao层3Service Service层4Controller Controller4. Bean的作用域Spring Bean支持多种作用域singleton默认每个Spring容器中只有一个Bean实例。prototype每次请求都会创建一个新的Bean实例。request每个HTTP请求创建一个Bean实例仅Web应用。session每个HTTP会话创建一个Bean实例仅Web应用。application每个ServletContext创建一个Bean实例仅Web应用。四、AOP面向切面编程Joinpoint 连接点 程序执行过程中能够插入切面的点 类里的方法都可以称为连接点Pointcut 切入点 程序执行时真正被插入切面的方法Advice 增强/通知 实际添加的代码逻辑 前置通知、后置通知、最终通知、异常通知、环绕通知Aspect 切面 将通知应用到切入点的过程1.xml配置文件方式引入依赖pom.xmlapplicationContext.xml注意环绕通知时需要手动放行2.注解配置方式