第五章 spring框架

目录

前言

5.1setter注入

5.1.1 环境准备

 5.1.2 注入引用数据类型

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

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

 步骤3:运行程序

5.1.3 注入简单数据类型  

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

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

 步骤3:运行程序

 5.2 构造器注入

5.2.1 环境准备

 5.2.2 构造器注入引用数据类型

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

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

步骤3:运行程序

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

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

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

步骤3:运行程序

 5.2.4 构造器注入多个简单数据类型

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

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

 步骤3:运行程序


前言

在上一章,我们学习了,Bean的生命周期(添加初始化和销毁方法,配置生命周期)以及close关闭容器,和注册钩子关闭容器,详细可见:第四章 spring-CSDN博客

这一章,我们主要讲解DI的相关内容;

首先,向一个类中传输数据主要是:

1,普通方法(set方法)

2,构造方法

依赖注入描述了在容器中建立 bean bean 之间的依赖关系的过程,假设在 bean 运行需要的是数字或 字符串,我们传输数据:
        1,引用类型
        2,简单类型(基本数据类型与String)
Spring就是基于上面知识点,为我们提供了:
        1,setter注入
                1.简单类型
                2.引用类型
        2,构造器注入
                1.简单类型
                2.引用类型

5.1setter注入

5.1.1 环境准备

为了更好的学习下面内容,我们依旧准备一个新环境 :
        创建一个Maven 项目;
        pom.xml添加依赖;
        resources下添加 spring 的配置文件;
        具体前面有详细操作:
(1) 项目中添加 BookDao BookDaoImpl UserDao UserDaoImpl BookService和 BookServiceImpl类

 

public interface BookDao {
    public void save();
}

public class BookDaoImpl implements BookDao {

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

public interface UserDao {
    public void save();
}

public class UserDaoImpl implements UserDao {
    public void save() {
        System.out.println("UserDao save...");
    }
}

 

public interface BookService {

    public void save();
}

 

public class BookServiceImpl implements BookService {
    private BookDao bookDao;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void save() {
        System.out.println("BookService save...");
        bookDao.save();

    }
}
(2)resources 下提供 spring 的配置文件
<?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 https://www.springframework.org/schema/context/spring-context.xsd">

   <bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"/>
    <bean id="bookService" class="com.hw.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
        </bean>

</beans>

(3)编写App运行类,加载SpringIOC容器,并从中获取对应的bean对象

public class App {
    public static void main( String[] args ) {
    ApplicationContext context = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        BookService bookService = (BookService) context.getBean("bookService");
        bookService.save();
    }
}

 5.1.2 注入引用数据类型

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

BookServiceImpl 中声明 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();
    }
}

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

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"
       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 https://www.springframework.org/schema/context/spring-context.xsd">

   <bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl"/>
    <bean id="userDao" class="com.hw.dao.impl.UserDaoImpl"></bean>
    <bean id="bookService" class="com.hw.service.impl.BookServiceImpl">

        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"></property>
        </bean>

</beans>

 步骤3:运行程序

运行App类,查看结果,说明userDao已经成功注入 

5.1.3 注入简单数据类型  

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

BookDaoImpl 类中声明对应的简单数据类型的属性 , 并提供对应的 setter 方法
public class BookDaoImpl implements BookDao {
    private String databaseName;
    private int connectionNum;
    public void setConnectionNum(int connectionNum) {
        this.connectionNum = connectionNum;
    }
    public void setDatabaseName(String databaseName) {
        this.databaseName = databaseName;
    }
    public void save() {
        System.out.println("BookDao save..."+databaseName+","+connectionNum);
    }
}

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

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"
       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 https://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl">
        <property name="databaseName" value="mysql"/>
        <property name="connectionNum" value="10"/>
    </bean>
    <bean id="userDao" class="com.hw.dao.impl.UserDaoImpl"/>
    <bean id="bookService"
          class="com.hw.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDao"/>
        <property name="userDao" ref="userDao"/>
    </bean>

</beans>

 步骤3:运行程序

 5.2 构造器注入

5.2.1 环境准备

构造器注入也就是构造方法注入,学习之前,还是先准备下环境 :
        创建一个Maven 项目
        pom.xml添加依赖
        resources下添加 spring 的配置文件
这些步骤和前面的都一致,大家可以快速的拷贝即可,最终项目的结构如下 :

 5.2.2 构造器注入引用数据类型

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

BookServiceImpl 类中将 bookDao setter 方法删除掉 , 并添加带有 bookDao 参数的构造方法
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();
    }
}

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

applicationContext.xml 中配置
<?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 https://www.springframework.org/schema/context/spring-context.xsd">

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

</beans>

 说明:标签中name属性对应的值为构造方法函数中方法形参的参数名,必须保持一直

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

步骤3:运行程序

运行 App 类,查看结果,说明 bookDao 已经成功注入

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

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

BookServiceImpl声明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();
    }
}

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

applicationContext.xml 中配置注入
<?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 https://www.springframework.org/schema/context/spring-context.xsd">

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

</beans>

步骤3:运行程序

 

 5.2.4 构造器注入多个简单数据类型

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

修改 BookDaoImpl 类,添加构造方法

public class BookDaoImpl implements BookDao {
    private String databaseName;
    private int connectionNum;
    public BookDaoImpl(String databaseName, int connectionNum) {
        this.databaseName = databaseName;
        this.connectionNum = connectionNum;
    }
    public void save() {
        System.out.println("book dao save..."+databaseName+","+connectionNum);
    }
}

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

applicationContext.xml中进行注入配置

<?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 https://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="bookDao" class="com.hw.dao.impl.BookDaoImpl">
        <constructor-arg name="databaseName" value="mysql"/>
        <constructor-arg name="connectionNum" value="666"/>
    </bean>
    <bean id="userDao" class="com.hw.dao.impl.UserDaoImpl"/>
    <bean id="bookService" class="com.hw.service.impl.BookServiceImpl">
        <constructor-arg name="bookDao" ref="bookDao"/>
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>

</beans>

 步骤3:运行程序

 这节,主要讲解了Spring的依赖注入的实现方式:

setter注入:

        简单数据类型

        引用数据类型

构造器注入

        简单数据类型

        引用数据类型

在依赖注入的方式选择上:

建议使用setter注入,第三方技术根据情况决定。

  • 44
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值