天天看点

关于Spring依赖注入的深入理解前言

关于Spring依赖注入的深入理解

  • 前言
    • 开发环境
    • 创建项目
    • 安装spring相关依赖包
    • 创建applicationContext.xml
    • 在Dao层创建UserDao接口,并写一个showUser()方法
    • 在daoImpl层中创建UserDaoImpl实现类,并实现接口中的showUser方法
    • 在Biz层创建BizDao接口,并写一个showUserBiz()方法
    • 在bizImpl层中创建UserBizImpl实现类,并实现接口中的showUserBiz方法
    • 在applicationContext.xml中创建Bean实例进行依赖注入
    • 创建一个测试类
    • 运行结果
    • 总结

前言

本文是作者@Mecle_对spring依赖注入的个人理解,希望在spring开发中能对大家有所帮助。

开发环境

MAC OS

IntelliJ IDEA

Maven

创建项目

创建如图项目结构(可忽略类,下文会详细讲解)

关于Spring依赖注入的深入理解前言

安装spring相关依赖包

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.1.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>
           

创建applicationContext.xml

右击resource,按光标位置依次点击

关于Spring依赖注入的深入理解前言

输入源文件名

关于Spring依赖注入的深入理解前言

创建成功后如图

关于Spring依赖注入的深入理解前言

在Dao层创建UserDao接口,并写一个showUser()方法

package dao;

public interface UserDao {
    public void showUser();
}

           

在daoImpl层中创建UserDaoImpl实现类,并实现接口中的showUser方法

package dao.daoImpl;
import dao.UserDao;

public class UserDaoImpl implements UserDao {
    public void showUser() {
        System.out.println("大家好,我是Mecle创建的UserDaoImpl!");
    }
}


           

在Biz层创建BizDao接口,并写一个showUserBiz()方法

package biz;

public interface UserBiz {
    public void showUserBiz();
}
           

在bizImpl层中创建UserBizImpl实现类,并实现接口中的showUserBiz方法

package biz.bizImpl;

import biz.UserBiz;
import dao.UserDao;

public class UserBizImpl implements UserBiz {
    //声明相关变量
    private UserDao userDao;
    private UserBiz userBiz;
    //setter方法相当于依赖注入的门阀,只有设置了门阀才会被开启,Bean实例才会被创建,依赖注入才会顺利完成
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void setUserBiz(UserBiz userBiz) {
        this.userBiz = userBiz;
    }

    public void showUserBiz() {
        this.userDao.showUser();
        System.out.println("大家好,我是Mecle创建的UserBizImpl!");
    }
}

           

在applicationContext.xml中创建Bean实例进行依赖注入

有几个实现类就创建几个Bean实例,id为bean实例的唯一标识,class为对应实现类的包路径,property是bean的子元素,它用于调用bean实例中的showUser()方法完成属性赋值,从而实现依赖注入。

<?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="userDao" class="dao.daoImpl.UserDaoImpl"></bean>
        <bean id="userBiz" class="biz.bizImpl.UserBizImpl">
        		将id为userDao的Bean实例注入到userDao实例中!
                <property name="userDao" ref="userDao"></property>
        </bean>
</beans>
           

创建一个测试类

package test;

import biz.UserBiz;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
    public static void main(String args[]) {
        //读取applicationContext.xml文件
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取userBiz的Bean实例
        UserBiz userBiz = (UserBiz) applicationContext.getBean("userBiz");
        //调用UserBizImpl中的showUserBiz方法
        userBiz.showUserBiz();
    }
}

           

运行结果

关于Spring依赖注入的深入理解前言

总结

1、有多少个实现类就创建多少个Bean实例,因为创建bean实例的本质就是实例化一个对象(可以这么理解)。

2、如果要在一个实现类中调用另外一个实现类中的方法,这是就需要进行依赖注入,如本文中的UserBizImpl类调用了UserDaoImpl中的showUser()方法,就需要UserBizImpl中声明userDao变量并创建它的setter方法,用于依赖注入的实现。同时在applicationContext.xml中的调用方(即id为userBiz的Bean实例)中创建一个property子元素,name为被调用方(即UserDaoImpl中的成员变量userDao),ref为需要被注入的Bean实例的id。这样就实现了一个完整的依赖注入过程。

继续阅读