Spring_ 依赖注入 详细讲解


一、什么是依赖注入?

DI (Dependency Injection):依赖注入是指在 Spring IOC 容器创建对象的过程中,将所依赖的对象通过配置进行注入。我们可以通过依赖注入的方式来降低对象间的耦合度。
在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使对象之间的耦合越小越好。
对于 Spring IOC 容器而言我们更多的是使用它的依赖注入。 Spring 创建对象的过程叫做 IOC,创建对象时给对象属性赋值叫做 DI,所以我们可以认为 IOC 和 DI 是同一个事情。

1、类的关系

继承 实现 依赖 关联 聚合 组合

1.1、 依赖关系(Dependency)

【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者

1.2、聚合(Aggregation)

【聚合关系】:是整体与部分的关系.如车和轮胎是整体和部分的关系. 聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体

2、关系强度

继承 = 实现 > 组合 > 聚合 > 关联 > 依赖

二、 为什么使用依赖注入?

1、开闭原则

1.1、定义

OCP (Open Close Principle): 软件本身应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。

1.2、 开闭原则优点

易扩展。开闭原则的定义就要求对扩展开放。
易维护。软件开发中,对现有代码的修改是一件很有风险的事情,符合开闭原则的设计在扩展时无需修改现有代码,规避了这个风险,大大提交了可维护性。

2、高内聚,低耦合

高内聚是指相关度比较高的部分尽可能的集中,不要分散。
低耦合就是说两个相关的模块尽可以能把依赖的部分降低到最小,不要产生强依赖。

三、 依赖注入的方式

在使用依赖注入时,如果注入的是 Bean 对象,那么要求注入的 Bean 对象与被注入的 Bean 对象都需要 Spring IOC 容器来实例化。

1、通过 Set 方法注入

需要为注入的成员变量提供 Set 方法。

1.1、 配置文件

 <bean id="usersDao" class="com.bjsxt.dao.impl.UsersDaoImpl"/>
    <bean id="usersDaoMybatis" class="com.bjsxt.dao.impl.UsersDaoMybatisImpl"/>
    <bean id="usersService" name="name1,name2,name3" class="com.bjsxt.service.impl.UsersServiceImpl">
        <property name="usersDao">
            <ref bean="usersDaoMybatis"/>
        </property>
    </bean>

1.2、 Bean 对象

public class UsersServiceImpl implements UsersService {
   
    private UsersDao usersDao;

    public UsersDao getUsersDao() {
   
        return usersDao;
    }

    public void setUsersDao(UsersDao usersDao) {
   
        this.usersDao = usersDao;
    }

    public UsersServiceImpl(){
   
        System.out.println("Init.......");
    }

    @Override
    public void addUsers() {
   
        usersDao.insertUsers();
        //System.out.println("UsersService addUsers .....");
    }
}

2、通过构造方法注入

Bean 对象中需要提供有参的构造方法

2.1、 配置文件

    <bean id="usersDao" class="com.bjsxt.dao.impl.UsersDaoImpl"/>
    <bean id="usersDaoMybatis" class="com.bjsxt.dao.impl.UsersDaoMybatisImpl"/>
    <bean id="usersService" name="name1,name2,name3" class="com.bjsxt.service.impl.UsersServiceImpl">
<!--        通过set方式注入-->
<!--        <property name="usersDao">-->
<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值