核心内容摘要
探索AI辅助开发:用快马平台让AI成为你理解和生成open code的得力助手
Spring 中的 DIDependency Injection依赖注入是 Spring 框架的核心特性之一也是控制反转IoCInversion of Control原则的具体实现。
什么是 DI依赖注入是一种设计模式它将对象的依赖关系从对象内部移到外部容器Spring 容器来管理。
简单来说就是由容器负责创建对象并注入它所依赖的其他对象而不是由对象自己创建或查找依赖。
DI 的核心概念
依赖关系// 没有 DI 的情况publicclassUserService{privateUserDaouserDao;publicUserService(){// 对象自己创建依赖耦合度高this.userDaonewUserDao();}}// 使用 DI 的情况publicclassUserService{privateUserDaouserDao;// 通过构造函数注入依赖publicUserService(UserDaouserDao){this.userDaouserDao;}}
控制反转传统方式对象自己控制依赖的创建和管理DI 方式控制权反转给 Spring 容器由容器负责注入依赖DI 的三种注入方式
构造函数注入推荐ComponentpublicclassUserService{privatefinalUserDaouserDao;AutowiredpublicUserService(UserDaouserDao){this.userDaouserDao;}}
Setter 方法注入ComponentpublicclassUserService{privateUserDaouserDao;AutowiredpublicvoidsetUserDao(UserDaouserDao){this.userDaouserDao;}}
字段注入不推荐ComponentpublicclassUserService{AutowiredprivateUserDaouserDao;}DI 的优势降低耦合度对象之间通过接口交互不直接依赖具体实现提高可测试性可以轻松注入 Mock 对象进行单元测试便于维护依赖关系集中管理修改配置即可改变实现促进代码复用组件可以灵活组合使用符合单一职责原则对象专注于自己的业务逻辑Spring 中 DI 的实现Spring 通过以下注解实现 DIComponent标记类为 Spring 管理的 BeanAutowired自动装配依赖Service、Repository、Controller特定场景的组件注解Qualifier指定注入的 Bean 名称Value注入配置值实际示例// 定义接口publicinterfaceMessageService{StringsendMessage(Stringmessage);}// 实现类Service(emailService)publicclassEmailServiceimplementsMessageService{publicStringsendMessage(Stringmessage){returnEmail: message;}}Service(smsService)publicclassSmsServiceimplementsMessageService{publicStringsendMessage(Stringmessage){returnSMS: message;}}// 使用依赖注入ServicepublicclassNotificationService{privatefinalMessageServicemessageService;AutowiredpublicNotificationService(Qualifier(emailService)MessageServicemessageService){this.messageServicemessageService;}publicvoidsendNotification(Stringmessage){System.out.println(messageService.sendMessage(message));}}
总结DI 是 Spring 框架的基石它通过将对象的创建和依赖管理交给容器实现了松耦合、易测试、易维护的代码结构。
在现代 Java 开发中DI 已经成为主流的设计模式不仅限于 Spring在其他框架中也有广泛应用。