文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2. DI 依赖注入
2.1 什么是依赖注入
在依赖注入的模式下,创建被调用者得工作不再由调用者来完成,创建被调用者实例的工作通常由 Spring 容器完成,然后注入调用者。 创建对象时,向类里的属性设置值
2.2 为什么使用依赖注入
为了实现代码/模块之间松耦合。
2.3 为什么要实现松耦合
上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。
一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度。
2.4 IOC 和 DI 区别
- IOC 控制反转,把对象创建交给 Spring 配置
- DI 依赖注入,向类里面属性注入值
- 关系,依赖注入不能单独存在,需要在 IOC 基础上完成操作
2.5 依赖注入方式
使用 set 方法注入
使用有参构造注入
使用接口注入
说明:Spring 框架中支持前两种方式
(1)使用 set 方法注入
<bean id="person" class="cn.wang.property.Person">
<!--set 方法注入属性
name 属性值:类中定义的属性名称
value 属性值:设置具体的值
-->
<property name="pname" value="zs"></property>
</bean>1234567
(2)使用有参构造注入
public class Person {
private String pname;
public void setPname(String pname) {
this.pname = pname;
}
}
<bean id="user" class="cn.wang.ioc.User">
<!--构造方法注入属性-->
<constructor-arg name="pname" value="Tony"></constructor-arg>
</bean>
(3)注入对象类型属性
- 创建 service 和 dao 类,在 service 中得到 dao
具体实现过程
- 在 service 中把 dao 作为属性,生成 dao 的 set 方法
public class UserService {
// 1.定义 UserDao 类型属性
private UserDao userDao;
// 2.生成 set 方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
- 配置文件注入关系
<bean id="userDao" class="cn.wang.property.UserDao">
<property name="name" value="Tom"></property>
</bean>
<bean id="userService" class="cn.wang.property.UserService">
<!--name 属性值:UserService 类里的属性名称-->
<!--ref 属性:UserDao 类配置 bean 标签中的 id 值-->
<property name="userDao" ref="userDao"></property>
</bean>12345678
(4)p 名称空间注入
(5)注入复杂类型属性
<!-- 注入复杂类型属性值 -->
<!--
String pname;
String[] arrs;
List<String> list;
Map<String, String> map;
Properties props;
-->
<bean id="person" class="cn.wang.property.Person">
<property name="pname" value="zs"></property>
<property name="arrs">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<property name="list">
<list>
<value>qqq</value>
<value>www</value>
<value>eee</value>
</list>
</property>
<property name="map">
<map>
<entry key="001" value="Tom"></entry>
<entry key="002" value="Amy"></entry>
<entry key="003" value="Jim"></entry>
</map>
</property>
<property name="props">
<props>
<prop key="username">admin</prop>
<prop key="passwprd">admin</prop>
</props>
</property>
</bean>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论