文章目录
Spring中DI介绍
DI
(Dependency Injection)即依赖注入,对象之间的依赖由容器在运行期决定,即容器动态的将某个依赖注入到对象之中。
一、基于XML配置注入依赖
1. 有参构造函数注入依赖
①bean类实现有参构造函数
②在配置文件中配置参数通过有参构造函数给对象属性赋值
有参构造是使用constructor-arg标签
<bean id="student4" class="com.wyscoder.spring.IOC.pojo.Student" >
<constructor-arg name="id" value="1"/>
<constructor-arg name="name" value="吕布" />
</bean>
③测试
2. set方法注入依赖
①给对象的属性提供setter方法
②在配置文件中通过set方式赋值
通过set方式使用的是property标签
<bean id="student5" class="com.wyscoder.spring.IOC.pojo.Student">
<property name="id" value="1"/>
<property name="name" value="王昭君"/>
</bean>
测试
3. 注入自定义类型
注入的依赖也可以是自定义类型
①添加自定义类型
public class User {
private int id;
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
②配置文件
自定义类型也是要交给spring管理,如何获取管理对象实例呢
使用ref属性来获取值,该ref会自动识别为spring中对象的名字
使用value属性来获取值,spring会认为仅仅是一个字符串值
<!--注入自定义类型-->
<bean id="user" class="com.wyscoder.spring.IOC.pojo.User">
<constructor-arg name="id" value="1"/>
<constructor-arg name="name" value="ww"/>
</bean>
<bean id="student6" class="com.wyscoder.spring.IOC.pojo.Student" >
<property name="id" value="1"/>
<property name="name" value="王昭君"/>
<property name="user" ref="user"/>
</bean>
③测试
4. 注入集合类型
①添加集合属性
②配置文件
<!--注入集合类型-->
<bean id="student7" class="com.wyscoder.spring.IOC.pojo.Student">
<property name="id" value="1"/>
<property name="name" value="赵云"/>
<!--注入list类型-->
<property name="course">
<list>
<value>C++</value>
<value>Java</value>
<value>Python</value>
</list>
</property>
<!--注入map类型-->
<property name="score" >
<map>
<entry key="C++" value="100"/>
<entry key="Java" value="99"/>
<entry key="Python" value="98"/>
</map>
</property>
</bean>
测试
二、基于注解形式注入依赖
开启注解扫描
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启扫描:指定到包路径或者类名;会扫描类、方法、属性上是否有注解-->
<context:component-scan base-package="com.wyscoder.spring.IOC"/>
</beans>
注解 | 说明 |
---|---|
@Value | 注入普通类型属性 |
@Resource | 注入对象类型 |
@Autowired | 注入对象类型 |
1. @Value
该注解只能添加到普通类型上, @Value(“1”)注解中可以赋值完成对基础属性的依赖注入。
@Component(value = "student")
public class Student {
@Value("1")
private Integer id;
}
2. @Resource
该注解是注入对象类型,该注解是由Java 提供的,注意不是spring框架提供,默认按照名称进行装配
@Component(value = "student")
public class Student {
//自定义类型
@Resource(name = "user")
private User user;
3. @Autowired
注入对象类型 ,是Spring框架提供的,按照类型来注入
@Component(value = "student")
public class Student {
//自定义类型
@Autowired
private User user;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95487.html