前言:
在接触 Spring 框架之前,通常我们会在
main
方法或其他业务逻辑中手动new
对象,然后调用这些对象的方法来完成任务。手动创建对象的方式意味着我们自己掌握了对象的控制权。然而,在 Spring 中,我们不再直接在代码中手动创建对象,而是将对象的创建、管理、依赖注入等职责交给了 Spring 容器。Spring 框架通过 IoC(控制反转)和 DI(依赖注入)来实现这一点。
大家伙,这次封面是我把标题发给ai,让它给我画的。你们觉得怎么样哈哈哈~
目录
Setter 方法注入中的Autowired 是否可以省略?
一、IoC 控制反转
1.字面意思:
Inversion of Control :控制权的反转
2.含义:
是一种设计原则/思想,其核心是将程序中的对象创建、依赖管理和流程控制从应用程序中剥离出来,交给外部容器(如 Spring 框架)管理。IoC 的目的是减少代码耦合,提高代码的可重用性、可测试性和灵活性。
3.举个栗子~
传统编程模型:
在没有 IoC 的情况下,
HelloController
类会自己创建HelloWorld
的实例,控制着依赖的创建和管理。//一个用来打招呼的类 class HelloWorld { public void sayHello() { System.out.println("Hello, World!"); } } public class HelloController { private HelloWorld helloWorld; public HelloController() { this.helloWorld = new HelloWorld(); // 自己创建依赖 } public void sayHello() { helloWorld.sayHello(); } }
这种情况下,
HelloController
完全控制了HelloWorld
的创建过程,这是一种正向控制。
IoC 编程模型:
通过 Spring IoC 容器,这种控制反转了。
HelloController
不再创建HelloWorld
,而是通过依赖注入的方式,由外部(Spring 容器)来注入HelloWorld
的实例。@Data @Component class HelloWorld { public void sayHello() { System.out.println("Hello, World!"); } } @Controller public class HelloController { @Autowired private HelloWorld helloWorld; @PostConstruct public void sayHello() { helloWorld.sayHello(); } }
控制权被“反转”到了 Spring 框架,Spring 框架决定何时创建、注入和销毁对象,应用程序代码只是被动接收。