在现代Java开发中,Java依赖注入(Dependency Injection, DI)是构建可维护、可测试和松耦合应用程序的核心技术之一。本教程将带你从零开始,深入浅出地掌握依赖注入框架的原理与实践,尤其聚焦于最流行的Spring框架。

依赖注入是一种控制反转(Inversion of Control, IoC)的设计模式。传统编程中,一个类会自己创建它所依赖的对象;而在依赖注入中,这些依赖由外部“注入”进来,通常由一个容器(如Spring容器)负责管理。
举个例子:假设你有一个 UserService 类,它需要一个 UserRepository 来访问数据库。不使用DI时,你可能会这样写:
public class UserService { private UserRepository repository = new UserRepository(); // 紧耦合! public void saveUser(String name) { repository.save(name); }}这种方式的问题在于:代码高度耦合,难以测试(比如你想用Mock对象替换真实数据库)。而使用Spring依赖注入后,代码变成这样:
@Servicepublic class UserService { private final UserRepository repository; // 通过构造函数注入依赖 public UserService(UserRepository repository) { this.repository = repository; } public void saveUser(String name) { repository.save(name); }}此时,UserRepository 的实例由Spring容器自动提供,你无需手动创建。这就是控制反转IoC的核心思想:把对象的创建和依赖关系的控制权交给容器。
Spring支持以下三种主要的依赖注入方式:
@Autowired 注解。@Componentpublic class EmailService { public void sendEmail(String to, String msg) { System.out.println("Sending email to " + to + ": " + msg); }}@Servicepublic class NotificationService { private final EmailService emailService; public NotificationService(EmailService emailService) { this.emailService = emailService; } public void notifyUser(String user) { emailService.sendEmail(user, "Welcome!"); }}Spring Boot 2.0+ 默认推荐使用构造函数注入,因为它保证了依赖不可变且非空。
@Servicepublic class OrderService { private PaymentService paymentService; @Autowired public void setPaymentService(PaymentService paymentService) { this.paymentService = paymentService; } public void processOrder() { paymentService.charge(); }}@Servicepublic class ReportService { @Autowired private DatabaseConnection db; // 不利于单元测试和不可变性 public void generateReport() { db.query("SELECT * FROM reports"); }}虽然字段注入代码简洁,但它破坏了封装性,使单元测试困难,并可能导致NPE(空指针异常)。
在Spring Boot中,你几乎不需要手动配置容器。只需在主类上添加 @SpringBootApplication 注解,Spring会自动扫描带有 @Component、@Service、@Repository 等注解的类,并将它们注册为Bean。
@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}通过本教程,你已经掌握了Java依赖注入的基本概念、Spring中的三种注入方式,以及为何控制反转IoC是现代Java开发的基石。记住:优先使用构造函数注入,避免字段注入,善用Spring容器管理你的Bean。
无论你是初学者还是有经验的开发者,理解并熟练运用依赖注入框架(尤其是Spring依赖注入)都将极大提升你的代码质量与开发效率。
现在,打开你的IDE,创建一个Spring Boot项目,亲手试试吧!
本文由主机测评网于2025-12-07发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025124351.html