news 2026/4/16 15:17:38

Spring IOC入门

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring IOC入门

一、为啥需要IOC?

先举个咱们写作业常遇到的例子:做一个用户查询功能,得有UserService(业务层)和UserDAO(数据访问层),UserService要用到UserDAO。传统写法是这样的:

// 传统写法 public class UserDAO { public void queryUser() { /* 查数据库 */ } } public class UserService { // 直接new一个UserDAO private UserDAO userDAO = new UserDAO(); public void getUserInfo() { userDAO.queryUser(); } }

这种写法看着简单,但问题超明显——耦合度太高!如果后面要换数据库,得把UserDAO改成UserDAOImpl,这时候必须改UserService里的代码,特别麻烦。而且对象创建、依赖关系都要自己管,系统一复杂就乱套了,测试起来也不方便。

而IOC的作用就是解决这个问题:把创建对象、管理依赖的活儿从我们写的代码里抽出来,交给Spring容器来管,咱们只管写业务逻辑。

二、核心概念:IOC和DI到底是啥?

1. IOC(控制反转):核心是“控制权转移”。以前是我们用new手动创建对象,现在把这个控制权交给Spring容器,这就是“反转”。

2. DI(依赖注入):是实现IOC的具体方式。容器创建对象时,会自动把这个对象需要的依赖(比如UserService需要的UserDAO)塞进去,不用我们手动赋值。

总结:IOC是思想,DI是实现手段,核心都是让代码解耦、好维护。

三、Spring IOC怎么用?两种常用配置方式

1. 传统XML配置

早期Spring用XML配置Bean,需要写一个applicationContext.xml文件,把要管理的对象和依赖都配置进去:

<!-- applicationContext.xml --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userDAO" class="com.example.UserDAO"/> <bean id="userService" class="com.example.UserService"> <property name="userDAO" ref="userDAO"/&gt; <!-- 注入依赖 --> </bean> </beans>

然后从容器里拿对象用,不用自己new了:

// 初始化容器,获取对象 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = context.getBean("userService", UserService.class); userService.getUserInfo();

2. 主流注解配置(重点掌握)

现在都用注解配置,比XML简单太多!常用注解就几个,记熟就行:

  • @Component/@Service/@Repository/@Controller:标记类为Spring管理的Bean(后三个是分层专用,语义更清晰);

  • @Autowired:自动注入依赖;

  • @Configuration + @ComponentScan:替代XML文件,开启组件扫描。

// DAO层:用@Repository标记 @Repository public class UserDAO { public void queryUser() { System.out.println("查询用户"); } } // Service层:用@Service标记,@Autowired自动注入 @Service public class UserService { @Autowired private UserDAO userDAO; public void getUserInfo() { userDAO.queryUser(); } } // 配置类:替代XML @Configuration @ComponentScan(basePackages = "com.example") // 扫描指定包下的注解 public class SpringConfig {} // 调用方式 public class Main { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); UserService userService = context.getBean(UserService.class); userService.getUserInfo(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 13:23:51

突破性iOS个性化方案:零门槛深度解锁你的iPhone潜能

突破性iOS个性化方案&#xff1a;零门槛深度解锁你的iPhone潜能 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 你是否厌倦了千篇一律的iPhone界面&#xff1f;当每次拿起手机看到相同的图标…

作者头像 李华
网站建设 2026/4/16 13:24:36

零样本分类技术深度探讨:AI万能分类器的未来发展方向

零样本分类技术深度探讨&#xff1a;AI万能分类器的未来发展方向 1. AI 万能分类器&#xff1a;无需训练的智能语义理解新范式 在传统机器学习流程中&#xff0c;文本分类任务通常依赖大量标注数据进行模型训练。从数据清洗、特征工程到模型调优&#xff0c;整个过程耗时长、…

作者头像 李华
网站建设 2026/4/16 13:25:39

iOS系统定制新境界:无需越狱实现个性化iPhone的终极方案

iOS系统定制新境界&#xff1a;无需越狱实现个性化iPhone的终极方案 【免费下载链接】CowabungaLite iOS 15 Customization Toolbox 项目地址: https://gitcode.com/gh_mirrors/co/CowabungaLite 为什么你的iPhone需要个性化定制&#xff1f; 你是否曾经感到困惑&#…

作者头像 李华
网站建设 2026/4/16 13:25:39

ResNet18性能优化:TensorRT加速指南

ResNet18性能优化&#xff1a;TensorRT加速指南 1. 背景与挑战&#xff1a;通用物体识别中的效率瓶颈 在当前AI应用广泛落地的背景下&#xff0c;通用物体识别已成为智能监控、内容审核、辅助驾驶等场景的核心能力。基于ImageNet预训练的ResNet-18模型因其结构简洁、精度适中…

作者头像 李华
网站建设 2026/4/16 11:25:54

纪念币预约神器:5分钟搞定全自动预约流程

纪念币预约神器&#xff1a;5分钟搞定全自动预约流程 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 还在为纪念币预约时手速不够快而烦恼吗&#xff1f;auto_commemorative_coin_bo…

作者头像 李华
网站建设 2026/4/16 3:05:44

E-Hentai漫画资源批量获取技术解决方案

E-Hentai漫画资源批量获取技术解决方案 【免费下载链接】E-Hentai-Downloader Download E-Hentai archive as zip file 项目地址: https://gitcode.com/gh_mirrors/eh/E-Hentai-Downloader 面对海量漫画资源难以高效获取的困境&#xff0c;传统的手动保存方式已无法满足…

作者头像 李华