Spring核心核心原理与基础实操完整详解 一、Spring家族核心框架定位很多初学者容易混淆 Spring、Spring Boot、Spring Cloud 三者的作用三者各司其职层层递进构成了Java开发的核心技术栈核心定位如下Spring Framework核心基础框架核心作用是简化原生Java开发通过解耦、资源管理等特性解决传统Java代码冗余、耦合度高的问题是后续所有Spring生态框架的基础。Spring Boot快速开发脚手架核心作用是加速项目开发简化Spring的繁琐配置实现自动装配、快速启动专注业务代码开发。Spring Cloud微服务分布式框架核心作用是实现分布式开发基于Spring Boot搭建微服务架构提供服务注册、熔断、网关等分布式全套解决方案。二、Spring整体系统架构Core Container 核心容器Spring的核心核心包含IoC控制反转、DI依赖注入负责对象的创建、管理、依赖维护实现代码彻底解耦。AOP面向切面编程基于动态代理实现无侵入式功能增强用于统一处理日志、事务、权限等通用业务。Aspects切面实现AOP思想的具体落地实现模块提供切面、切点、通知等核心能力。Data Access数据访问整合JDBC、MyBatis等持久层框架简化数据库操作统一数据访问规范。Data Integration数据集成支持事务管理、ORM映射、消息队列集成等数据联动能力。Web开发适配Web项目开发提供MVC架构、请求响应处理等Web核心能力。Test测试模块提供单元测试、集成测试支持简化Spring项目的测试流程。三、核心核心IoC控制反转 DI依赖注入核心目标充分解耦IOC控制反转思想使用对象时候由主动new产生对象转换为由外部提供对象此过程中对象创建控制权由程序转移到外部。Spring可以提供IoC容器充当IoC思想的“外部”。Bean在IoC容器中被创建或被管理的对象。DI依赖注入在容器中建立bean和bean之间的依赖关系的整个过程。3.1 IOC入门完整代码实操实现步骤导入依赖、定义类、配置XML、容器获取Bean1. 导入Spring核心Maven依赖dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version5.3.20/version /dependency2. 自定义业务类被Spring管理public class UserService { public void save(){ System.out.println(业务方法执行用户保存成功); } }3. 核心配置文件ApplicationContext.xml?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd !-- 将UserService交给Spring管理 -- bean iduserService classcom.service.UserService/ /beans4. 初始化容器、获取Bean测试代码import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestIoC { public static void main(String[] args) { // 1.加载配置文件初始化IoC容器 ApplicationContext context new ClassPathXmlApplicationContext(ApplicationContext.xml); // 2.从容器中获取Bean对象 UserService userService (UserService) context.getBean(userService); // 3.调用方法 userService.save(); } }3.2 DI入门依赖注入完整实操代码核心删除new对象通过setter注入依赖XML配置绑定关系1. Dao层代码public class UserDao { public void addUser(){ System.out.println(Dao层数据库新增用户); } }2. Service层代码提供setter方法public class UserService { // 声明依赖 private UserDao userDao; // 提供setter方法供Spring注入 public void setUserDao(UserDao userDao) { this.userDao userDao; } public void save(){ userDao.addUser(); System.out.println(Service层业务执行完成); } }3. DI依赖注入XML配置?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd !-- 先注册Dao对象 -- bean iduserDao classcom.dao.UserDao/ !-- 注册Service并注入Dao依赖 -- bean iduserService classcom.service.UserService property nameuserDao refuserDao/ /bean /beans四、Bean全面详解4.1 bean基础配置参数详解bean标签核心属性id容器唯一标识用于获取Bean、class类全限定名、name别名、scope作用域。!-- 基础完整配置格式 -- bean idbean唯一id name别名 class全类名 scopesingleton/4.2 别名配置案例代码!-- 方式1name设置多个别名逗号分隔 -- bean iduserDao namedao,userDaoImpl classcom.dao.UserDao/ !-- 方式2单独alias标签配置别名 -- alias nameuserDao aliasuserDaoAlias/效果可通过 id / name / alias 任意名称获取同一个Bean。4.3 作用范围scope详解scopesingleton默认单例容器启动创建1个全局共用scopeprototype多例每次getBean都新建对象request / sessionWeb项目专用!-- 多例Bean配置 -- bean iduserService classcom.service.UserService scopeprototype/4.4 实例化四种方式完整代码1. 构造方法实例化默认方式底层默认调用无参构造无参构造不存在则报错bean iduserDao classcom.dao.UserDao/2. 静态工厂实例化完整代码// 静态工厂类 public class StaticFactory { // 静态方法创建对象 public static UserDao getUserDao(){ return new UserDao(); } }!-- 静态工厂配置factory-method指定静态方法 -- bean iduserDao classcom.factory.StaticFactory factory-methodgetUserDao/3. 实例工厂实例化完整代码// 实例工厂类 public class InstanceFactory { public UserDao getUserDao(){ return new UserDao(); } }!-- 1.先创建工厂实例 -- bean idinstanceFactory classcom.factory.InstanceFactory/ !-- 2.通过工厂实例方法创建Bean -- bean iduserDao factory-beaninstanceFactory factory-methodgetUserDao/4. FactoryBean官方改进版完整代码import org.springframework.beans.factory.FactoryBean; public class UserDaoFactoryBean implements FactoryBeanUserDao { // 自定义Bean创建逻辑 Override public UserDao getObject() throws Exception { return new UserDao(); } Override public Class? getObjectType() { return UserDao.class; } }bean iduserDao classcom.factory.UserDaoFactoryBean/4.5 Bean生命周期完整实操代码完整流程创建对象 → 构造方法 → 属性注入 → 初始化方法 → 业务使用 → 销毁方法1. init-method / destroy-method 配置方式完整代码public class UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao userDao; System.out.println(属性注入完成); } // 自定义初始化方法 public void init(){ System.out.println(Bean初始化完成); } // 自定义销毁方法 public void destroy(){ System.out.println(Bean销毁执行); } public void save(){ System.out.println(执行业务方法); } }bean iduserDao classcom.dao.UserDao/ bean iduserService classcom.service.UserService init-methodinit destroy-methoddestroy property nameuserDao refuserDao/ /bean2. 接口方式完整代码import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; public class UserService implements InitializingBean, DisposableBean { Override public void afterPropertiesSet() throws Exception { System.out.println(接口Bean初始化); } Override public void destroy() throws Exception { System.out.println(接口Bean销毁); } }Bean销毁测试完整代码public class TestLifeCycle { public static void main(String[] args) { ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(ApplicationContext.xml); UserService userService (UserService) context.getBean(userService); userService.save(); // 方式1手动关闭容器 context.close(); // 方式2注册关闭钩子项目退出自动关闭 // context.registerShutdownHook(); } }