DI相关内容

文章目录

  • 依赖注入方式

前言

DI是学习Spring必不可少的一部分,接下来对于DI的知识我主要讲解的是注入方式。


一、什么是DI?

        答:DI是依赖注入(Dependency Injection)的缩写。DI是一种设计模式,用于减少代码之间的耦合度,从而提高代码的可复用性、可测试性和可维护性。在DI中,对象的依赖关系不再由对象本身负责管理和实例化,而是由外部容器注入。这样,各个对象之间的耦合度就相对降低了,使得代码更加灵活、扩展性更强


二、依赖注入方式

1.setter注入

        1. 引用类型

步骤一:声明属性并提供setter方法:

在service层接口实现类(BookServiceImpl)中声明dao层(UserDao)属性,并提供setter方法:

public class BookServiceImpl implements BookService{
    private BookDao bookDao;
    private UserDao userDao;
    
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
        userDao.save();
    }
}

步骤二:配置文件中进行注入配置:

在applicationContext.xml配置文件中使用property标签注入:

<?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.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"/>
    </bean>
</beans>
       总结:setter引用类型注入使用:使用的是<property name="" ref=""/>进行注入(在配置文件中编写)

         2. 简单类型:

步骤一:声明属性并提供setter方法:

在service层接口实现类(BookServiceImpl)中声明dao层(UserDao)属性,并提供setter方法:

public class BookDaoImpl implements BookDao {

    private String spring;
    private int mybatis;

    public void spring(int spring) {
        this.spring = spring;
    }

    public void mybatis(String mybatis) {
        this.mybatis = mybatis;
    }

    public void save() {
        System.out.println("book dao save ..."+spring+","+mybatis);
    }
}

value

步骤二:配置文件中进行注入配置

在applicationContext.xml配置文件中使用property标签注入

<?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.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <property name="spring" value="good"/>
     	<property name="mybatis" value="10"/>
    </bean>
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"/>
    </bean>
</beans>
value: 后面跟的是简单数据类型,参数类型,Spring会自动转换,但是不可以写成
<property name="mybatis" value="abc"/>
  总结:setter简单类型注入使用:<property name="" value="">进行注入(在配置文件中编写)

2.构造器注入

        1. 引用类型

步骤一:删除setter方法并提供构造方法:

在service层实现类(BookServiceImpl)中将dao层的setter方法删除,并添加带有dao参数的构造方法

public class BookServiceImpl implements BookService{
    private BookDao bookDao;

    public BookServiceImpl(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
}

步骤二:配置文件中进行配置构造方式注入:

<?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.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
    </bean>
</beans>

标签<constructor-arg>中:

        name属性对应的值为构造函数中方法形参的参数名,必须要保持一致。

        ref属性指向的是spring的IOC容器中其他bean对象。

总结:构造器引用类型

<bean ...>
	<constructor-arg name="" index="" type="" ref=""/>
</bean>

2.1.1 构造器注入多个引用数据类型

步骤一:提供多个属性的构造函数:

在service层实现类(BookServiceImpl)声明dao层(UserDao)并提供多个参数的构造函数

public class BookServiceImpl implements BookService{
    private BookDao bookDao;
    private UserDao userDao;

    public BookServiceImpl(BookDao bookDao,UserDao userDao) {
        this.bookDao = bookDao;
        this.userDao = userDao;
    }

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
        userDao.save();
    }
}

步骤二:  配置文件中配置多参数注入

<?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.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>
</beans>

        2. 多个简单类型

步骤一:添加多个简单属性并提供构造方法:

修改dao层实现类(BookDaoImpl),添加构造方法:

public class BookDaoImpl implements BookDao {
    private String spring;
    private int mybatis;

    public BookDaoImpl(String spring, int mybatis) {
        this.spring = spring;
        this.mybatis = mybatis;
    }

    public void save() {
        System.out.println("book dao save ..."+spring+","+mybatis);
    }
}

步骤二:配置完成多个属性构造器注入:

<?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.xsd">

    <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
        <constructor-arg name="spring" value="good"/>
        <constructor-arg name="mybatis" value="666"/>
    </bean>
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
    <bean id="bookService" class="com.itheima.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>
</beans>

注意:两个<contructor-arg>的配置顺序可以任意

总结:构造器简单类型注入

<bean ...>
	<constructor-arg name="" index="" type="" value=""/>
</bean>

总结

以上就是DI(依赖注入的方式),非常繁琐麻烦,下一节将简化依赖注入,感谢大家阅读,有不足的地方敬请指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值