Spring依赖注入是Spring经常使用到的内容,下面我就重点来详解Spring依赖注入的方式及流程@mikechen
Spring依赖注入定义
Spring依赖注入,英文名师Dependency Injection,简称DI,是指将一个对象所依赖的其他对象的引用传递给它,而不是让它自己去创建这些对象。
通过依赖注入,我们可以实现对象之间的松耦合,降低代码的复杂性和耦合度,提高应用程序的可维护性和可测试性。
Spring依赖注入方式
Spring依赖注入的实现方式包括构造函数注入、Setter方法注入和自动装配。
1.构造函数注入
构造函数注入是指在创建一个对象时,将其所依赖的其他对象作为构造函数的参数传递进去。
在Spring中,可以通过XML配置文件或注解来实现构造函数注入,示例:
<bean id="userService" class="com.example.UserService"> <constructor-arg ref="userDao"/> </bean>
public class UserServiceImpl implements UserService { private final UserDAO userDAO; public UserServiceImpl(UserDAO userDAO) { this.userDAO = userDAO; } // ... }
在这个例子中,创建一个名为“userService”的bean,并将一个名为“userDao”的bean作为构造函数的参数传递进去。
2.Setter方法注入
Setter方法注入是指通过对象的setter方法将其所依赖的其他对象注入到该对象中。
在Spring中,可以通过XML配置文件或注解来实现setter方法注入,示例:
<bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao"/> </bean>
public class UserController { private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } // ... }
在这个例子中,创建一个名为“userService”的bean,并将一个名为“userDao”的bean注入到它的“userDao”属性中。
3.注解注入
注解注入是指通过注解来标识需要注入的依赖对象,常用的注解包括:@Autowired和@Qualifier。
例如:
@Service public class UserServiceImpl implements UserService { @Autowired private UserDAO userDAO; // ... }
Spring容器会自动扫描带有特定注解的类或方法,并将注解标识的依赖对象注入到需要依赖的对象中。
Spring依赖注入原理
Spring的依赖注入是通过IoC容器实现的,以下是Spring依赖注入的流程:
1.创建IoC容器
在Spring中IoC容器负责创建和管理所有的对象,当应用程序启动时,IoC容器会被创建,并且会读取配置文件中的bean定义信息,然后创建相应的bean实例。
2.扫描并解析Bean定义信息
IoC容器会扫描配置文件中所有的bean定义信息,并将这些信息解析成容器内部的数据结构。
例如,在使用XML配置文件时,容器会解析<bean>标签的信息,并将它们存储在内存中。
3.实例化Bean
在解析完bean定义信息后,IoC容器会根据这些信息来实例化所有的bean对象。
这些bean对象可以是普通的Java对象、数据库连接池、JMS连接等等。
4.处理依赖注入
当一个bean被实例化后,IoC容器会检查这个bean所依赖的其他bean,并将它们注入到这个bean中
。注入可以通过构造函数注入、setter方法注入、自动装配等方式实现。
5.将Bean放入容器中
在所有的bean都被实例化和注入完毕后,IoC容器会将它们放入容器中,以便其他对象可以通过容器获取它们。
6.销毁Bean
当应用程序关闭时,IoC容器会销毁所有的bean对象,释放资源。
总之,Spring的依赖注入是通过IoC容器实现的,容器负责创建、管理和注入所有的bean对象,使得应用程序更加灵活和可维护。
以上就是Spring依赖注入详解,更多Spring内容请查看:Spring教程(史上最全图文详解)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》