返回介绍

2. DI 依赖注入

发布于 2025-02-23 12:20:58 字数 3904 浏览 0 评论 0 收藏 0

2.1 什么是依赖注入

在依赖注入的模式下,创建被调用者得工作不再由调用者来完成,创建被调用者实例的工作通常由 Spring 容器完成,然后注入调用者。 创建对象时,向类里的属性设置值

2.2 为什么使用依赖注入

为了实现代码/模块之间松耦合。

2.3 为什么要实现松耦合

上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。

一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度。

2.4 IOC 和 DI 区别

  1. IOC 控制反转,把对象创建交给 Spring 配置
  2. DI 依赖注入,向类里面属性注入值
  3. 关系,依赖注入不能单独存在,需要在 IOC 基础上完成操作

2.5 依赖注入方式

  1. 使用 set 方法注入

  2. 使用有参构造注入

  3. 使用接口注入

说明: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;
    }
}
  1. 配置文件注入关系
<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 名称空间注入

p 名称空间注入

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文