Spring中的DI介绍
DI(Dependency Injection),即“依赖注入”,组件之间依赖关系由容器在运行期决定,即容器动态的将某个依赖关系注入到组件当中。它是是 Spring 框架核心IOC技术的具体实现。
依赖注入是控制反转最常用的方式,通过控制反转可以减低计算机代码之间的耦合度。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
DI理解的关键点“谁依赖谁,为什么需要依赖”
- 谁依赖谁:应用程序依赖IOC容器。
- 为什么需要以依赖:应用程序需要IOC容器来提供对象需要的外部资源。
- 注入什么:注入某个对象所依赖的外部资源。
依赖关系的管理:
- 依赖关系的管理都交给Spring来维护。
- 在当前类需要用到其他类的对象,由Spring为我们提供,我们只需要在配置文件中说明。
这种依赖关系的维护就叫做依赖注入。
能够注入的数据:
- 基本类型和String。
- 其他bean类型(在配置文件中或者注解配置过的bean)。
- 复杂类型/集合类型。
依赖注入的方式:
- 基于配置的形式注入依赖;
- 基于注解的形式注入依赖;
基于配置的形式注入依赖
基于配置的形式注入依赖主要有两种方法:
- 通过有参构造函数注入依赖;
- 通过set方法注入依赖;
通过有参构造函数注入依赖
<?xml version="1.0" encoding="UTF-8"?>
<!--根标签-->
<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-3.0.xsd">
<!--依赖注入方式1:有参构造-->
<bean id="user" class="com.tulun.bean.User">
<!--id属性的注入-->
<constructor-arg name="id" value="22"></constructor-arg>
<!--name属性的注入-->
<constructor-arg name="name" value="zhangsan"></constructor-arg>
</bean>
</beans>
-
有参构造函数的依赖注入主要使用
<Constructor-arg>标签;name属性:表示类中的属性名。value属性:当前属性名赋值。
-
在类中必须包含有参构造函数,且和构造函数保持参数一致。
public class User {
private String id;
private String name;
//有参构造方法
public User(String id, String name) {
this.id = id;
this.name = name;
}
}
- 代码测试:
public class App {
public static void main(String[] args) {
//获取IOC的容器
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过容器来获取当前的对象
User user = (User) applicationContext.getBean("user");
System.out.println(user);
}
}
本文详细介绍了Spring框架中的依赖注入(DI)概念,包括DI的重要性、依赖关系的管理和注入方式。通过配置文件和注解两种形式,讲解了如何通过有参构造函数和set方法注入依赖。此外,还探讨了@Value、@Resource和@Autowired注解的使用,以及依赖解析过程和循环依赖问题的解决方案。
最低0.47元/天 解锁文章
39万+

被折叠的 条评论
为什么被折叠?



