Spring 核心知识点全解析(IOC+AOP)
前言Spring 框架作为 Java EE 开发的中流砥柱其核心思想IOC 控制反转、AOP 面向切面编程彻底解决了传统开发中代码耦合、功能复用性差等问题。本文将从 Spring 概述入手逐步拆解 IOC 和 AOP 的实现原理、配置方式结合实战案例让你彻底掌握 Spring 核心一、Spring 概述1.1 Spring 是什么Spring 是轻量级 Java EE 应用开源框架官网http://spring.io/由 Rod Johnson 为解决企业级编程开发的复杂性而创建。它并非替代现有框架而是通过整合各类技术为开发者提供一站式解决方案。1.2 Spring 简化开发的核心体现特性作用IOC控制反转解决传统开发中硬编码导致的程序耦合问题AOP面向切面编程运行期间不修改源代码即可对程序功能增强粘合剂特性提供整合 MyBatis、Struts2 等其他框架的能力1.3 Spring 体系结构Spring 框架按功能划分为五大核心模块Core Container核心容器提供 IOC 和 DI依赖注入核心能力包含 beans、core、context、expression 模块。AOP Aspects面向切面编程实现支持功能增强。Data Access/Integration简化持久层操作整合 JDBC、ORMMyBatis/Hibernate等。Web提供 Spring MVC 框架支持 Servlet、WebSocket 等 Web 开发。Test集成 JUnit、TestNG 等测试框架简化单元测试。1.4 Spring 发展历程1997 年IBM 提出 EJB 思想2002 年Rod Johnson 发布《Expert One-to-One J2EE Design and Development》阐述 EJB 开发痛点2004 年《Expert One-to-One J2EE Development without EJB》发布奠定 Spring 雏形2017 年Spring 5.0 通用版发布至今仍是主流版本。二、Spring IOC控制反转- 核心重点2.1 程序耦合的问题传统开发中Web 层、业务层、持久层存在强耦合例如// 持久层实现类 public class UserDaoImpl implements UserDao { Override public void addUser(){ System.out.println(insert into tb_user......); } } // 业务层实现类 public class UserServiceImpl implements UserService { // 硬编码依赖直接new Dao层对象 private UserDao userDao new UserDaoImpl(); public void addUser(){ userDao.addUser(); } } // 表现层 public class Client { public static void main(String[] args) { UserService userService new UserServiceImpl(); userService.addUser(); } }问题分析若修改 Dao 层实现类Service 层编译失败耦合度极高。2.2 IOC 核心思想控制反转正传开发者主动 new 对象如上述代码控制对象创建权反转由 IOC 工厂统一创建、管理对象开发者被动获取实现解耦。2.2.1 工厂模式实现 IOC 解耦手动实现步骤 1编写配置文件bean.propertiesUserDaocom.hg.dao.UserDaoImpl UserServicecom.hg.service.UserServiceImpl步骤 2实现 IOC 工厂类public class BeanFactory { // 容器存储对象 private static MapString, Object beans new HashMap(); // 静态代码块加载配置文件并创建对象 static { try { InputStream is BeanFactory.class.getClassLoader().getResourceAsStream(bean.properties); Properties prop new Properties(); prop.load(is); // 遍历配置文件反射创建对象 SetObject keys prop.keySet(); for (Object key : keys) { String beanName (String) key; String className prop.getProperty(beanName); Object bean Class.forName(className).newInstance(); beans.put(beanName, bean); } } catch (Exception e) { throw new ExceptionInInitializerError(初始化Bean工厂失败); } } // 获取对象方法 public static Object getBean(String beanName) { return beans.get(beanName); } }步骤 3改造 Service 层public class UserServiceImpl implements UserService { // 从工厂获取对象而非手动new private UserDao userDao (UserDao) BeanFactory.getBean(UserDao); public void addUser(){ userDao.addUser(); } }2.3 Spring 官方 IOC 实现2.3.1 快速上手XML 配置步骤 1创建 Maven 工程引入依赖dependencies !-- Spring核心依赖 -- dependency groupIdorg.springframework/groupId artifactIdspring-context/artifactId version5.2.8.RELEASE/version /dependency /dependencies步骤 2编写 Spring 配置文件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 !-- 将对象交给Spring容器管理 -- bean iduserDao classcom.hg.dao.UserDaoImpl/bean bean iduserService classcom.hg.service.UserServiceImpl/bean /beans步骤 3测试获取容器对象public class Client { public static void main(String[] args) { // 加载配置文件创建Spring容器 ApplicationContext ac new ClassPathXmlApplicationContext(applicationContext.xml); // 从容器获取对象 UserDao userDao (UserDao) ac.getBean(userDao); UserService userService (UserService) ac.getBean(userService); userService.addUser(); } }2.3.2 DI依赖注入- 解决 Service 层耦合IOC 解决对象创建问题DI 解决对象依赖赋值问题核心有 4 种注入方式方式 1构造函数注入// Service层 public class UserServiceImpl implements UserService { private UserDao userDao; private String name; private Integer age; // 构造方法 public UserServiceImpl(UserDao userDao, String name, Integer age) { this.userDao userDao; this.name name; this.age age; } Override public void addUser(){ System.out.println(name , age); userDao.addUser(); } }!-- 配置文件 -- bean iduserDao classcom.hg.dao.UserDaoImpl/bean bean iduserService classcom.hg.service.UserServiceImpl constructor-arg nameuserDao refuserDao/constructor-arg constructor-arg namename value张三/constructor-arg constructor-arg nameage value18/constructor-arg /bean方式 2Set 方法注入最常用// Service层 public class UserServiceImpl implements UserService { private UserDao userDao; private String name; private Integer age; // Set方法 public void setUserDao(UserDao userDao) {this.userDao userDao;} public void setName(String name) {this.name name;} public void setAge(Integer age) {this.age age;} Override public void addUser(){ System.out.println(name , age); userDao.addUser(); } }!-- 配置文件 -- bean iduserDao classcom.hg.dao.UserDaoImpl/bean bean iduserService classcom.hg.service.UserServiceImpl property nameuserDao refuserDao/property property namename value张三/property property nameage value18/property /bean方式 3自动注入!-- byType按类型注入byName按bean的id注入 -- bean iduserDao classcom.hg.dao.UserDaoImpl/bean bean iduserService classcom.hg.service.UserServiceImpl autowirebyType/bean方式 4集合类型注入了解// Service层 public class UserServiceImpl implements UserService { private String[] myStrs; private ListString myList; private SetString mySet; private MapString,String myMap; // Set方法省略... Override public void addUser(){ System.out.println(Arrays.toString(myStrs)); System.out.println(myList); System.out.println(mySet); System.out.println(myMap); } }!-- 配置文件 -- bean iduserService classcom.hg.service.UserServiceImpl property namemyStrs array valueAAA/value valueBBB/value /array /property property namemyList list valueAAA/value valueBBB/value /list /property property namemySet set valueAAA/value valueBBB/value /set /property property namemyMap map entry keykey1 valuevalue1/entry entry keykey2 valuevalue2/entry /map /property /bean未完待续~~~

相关新闻

碎碎念给大一,也随便想想大三

碎碎念给大一,也随便想想大三

致大学时光日期:2026年3月11日写给大一自己的一些建议其实也没什么资格给建议,毕竟我自己也混得不咋样。但要是能穿越回去,有些话还是想跟那个刚进校门的自己说说。1. 军训的时候可以偷懒觉得军训又累又晒,可以找理由请假&#xf…

2026/5/17 12:56:30 阅读更多 →
探秘温州新石器无人车:未来出行体验,销售中心实地体验分享

探秘温州新石器无人车:未来出行体验,销售中心实地体验分享

前几天,一位做连锁洗衣店的朋友老张跟我大倒苦水,说现在生意难做,成本压不下来。他掰着手指头算:一辆面包车,一个司机,一个月油费、工资、保险、维保加起来,轻轻松松七八千块就出去了。关键是&a…

2026/7/2 20:31:25 阅读更多 →
商汤小浣熊为OpenClaw注入新技能:软硬一体安全部署,养出精通Excel的龙虾!

商汤小浣熊为OpenClaw注入新技能:软硬一体安全部署,养出精通Excel的龙虾!

随着AI智能体OpenClaw的持续走热,如何让其从“有趣的玩具”转变为“能干活的员工”,成为业界关注焦点。3月11日,围绕OpenClaw生态,商汤科技旗下“办公小浣熊”推出双路径赋能方案,旨在通过“能力开放”与“一体化交付”…

2026/5/17 3:38:31 阅读更多 →

最新新闻

LosslessCut无损编辑架构:FFmpeg GUI工具的技术革新与多场景应用

LosslessCut无损编辑架构:FFmpeg GUI工具的技术革新与多场景应用

LosslessCut无损编辑架构:FFmpeg GUI工具的技术革新与多场景应用 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在传统视频编辑领域,重编码带…

2026/7/3 12:41:17 阅读更多 →
ParsecVDisplay虚拟显示器驱动架构深度解析:Windows高性能虚拟显示解决方案实战指南

ParsecVDisplay虚拟显示器驱动架构深度解析:Windows高性能虚拟显示解决方案实战指南

ParsecVDisplay虚拟显示器驱动架构深度解析:Windows高性能虚拟显示解决方案实战指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd ParsecVDisplay是一款基于Parsec …

2026/7/3 12:41:17 阅读更多 →
【JAVA毕设源码分享】基于springboot人像后期融合网站的设计与实现的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot人像后期融合网站的设计与实现的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/3 12:39:17 阅读更多 →
锂电牵引辊需具备哪些核心性能?靠谱生产厂家怎么选?

锂电牵引辊需具备哪些核心性能?靠谱生产厂家怎么选?

锂电牵引辊是锂电池极片、隔膜生产线上的核心传动部件,承担基材平稳传输、张力精准调控的关键作用,其加工精度、材料耐候性直接决定电池生产良率与产线运行稳定性,适配锂电复杂工况的定制化产品与专业制造厂家,是新能源制造企业提…

2026/7/3 12:37:16 阅读更多 →
网盘直链下载助手终极指南:如何5分钟内实现浏览器直接下载文件

网盘直链下载助手终极指南:如何5分钟内实现浏览器直接下载文件

网盘直链下载助手终极指南:如何5分钟内实现浏览器直接下载文件 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘…

2026/7/3 12:35:15 阅读更多 →
手游漏洞挖掘入门:从网络抓包到逻辑漏洞实战分析

手游漏洞挖掘入门:从网络抓包到逻辑漏洞实战分析

1. 项目概述:从“玩游戏”到“找漏洞”的思维跃迁很多朋友在手游里投入了大量时间,从刷副本到研究配队,乐此不疲。但你是否想过,除了“玩”游戏,你还可以“看”游戏?我说的“看”,不是看剧情动画…

2026/7/3 12:31:13 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻