详解Spring之依赖注入在Spring中的具体实现

在上一节中我们谈到了Spring中控制反转和依赖注入的原理!那么有很多小伙伴可能就会问了,”在Spring中应该如何具体的实现啊?“。
OK!今天我们就来讲一讲控制反转和依赖注入在Spring中的具体实现,来看一看Spring这个导演是如何具体的来拍摄一部电影的!
在这里插入图片描述
废话不多讲,直接来上我们今天的代码,今天我们要新建具体的工程了!我们使用的开发工具是最近比较流行的IDEA。
首先我们创建一个maven工程,groupid就设置为com.ironman;工程名称设置为im01_DI。创建完成之后的项目是这样子的:
在这里插入图片描述
接下来我们在pom.xml文件中导入Spring需要的具体的依赖。
代码如下:

<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
</dependencies>

我么这就完成了Spring项目创建的准备工作了。接下来正式开始:
1、在main中的java文件夹下创建一个接口,类名为com.ironman.service.IFilmService

package com.ironman.service;

/**
 * 电影业务层的接口
 */
public interface IFilmService {
    
    

    //模拟电影的拍摄过程
    void saveFilm();
}

2、在service文件夹下创建一个类,类名为impl.FimServiseImpl

package com.ironman.service.impl;

import com.ironman.service.IFilmService;

import java.util.Date;

/**
 * 电影的业务层的实现类
 */
public class FilmServiceImpl implements IFilmService {
    
    
    //适用于不经常变化的数据
    private  String actorname;
    private Integer actorage;
    private Date datetime;
    /**
    此处为我们的构造函数,通过此构造函数完成我们的对象数据的注入
    */
    public FilmServiceImpl(String actorname,Integer actorage,Date datetime){
    
    

        this.actorname = actorname;
        this.actorage = actorage;
        this.datetime = datetime;
    }

    public void saveFilm() {
    
    
        System.out.println("电影完成拍摄了!"+"\n"+"演员名称"+actorname+"\n"+"年龄"+actorage+"\n"+"程序编译日期"+datetime);
    }
}

3、在com.ironman文件夹下创建一个view.Client的类

package com.ironman.view;

import com.ironman.service.IFilmService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 模拟一个表现层,用于调用业务层
 */
public class Client {
    
    
    public static void main(String[] args){
    
    
        
        //获取核心容器的对象
        ClassPathXmlApplicationContext fc = new ClassPathXmlApplicationContext("bean.xml");

        IFilmService fs = (IFilmService)fc.getBean("filmService");
        fs.saveFilm();
    }
}

接下来我们要告诉Spring我们要选择哪种注入方式,并注入哪些数据;
4、在我们的resources文件夹下创建一个bean.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    /**
    调用构造函数注入我们配置的数据
    */
<bean id = "filmService" class="com.ironman.service.impl.FilmServiceImpl">
    <constructor-arg name = "actorname" value = "RobertDowneyJr"></constructor-arg>
    <constructor-arg name = "actorage"  value = "18"></constructor-arg>
    <constructor-arg name = "datetime" ref = "now"></constructor-arg>
    /**
    细心的朋友们可能会发现,此处最后一个注入对象的参数发生了变化,不是value而是换成了ref
    这里我们对其中可能会用到的标签进行以下说明(其中前三个用于指定为哪个参数赋值,后两个完成赋值):

    		type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中或某些参数的类型
		index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。参数索引的位置时从0开始。
		name:用于指定给构造函数中指定名称的参数赋值(常用)

		value: 用于提供基本类型和String类型的数据
		ref: 用于指定其他的bean类数据,它指的就是在Spring的IOC核心容器中出现过的bean对象
    */
</bean>

/**
配置一个日期对象
*/
<bean id ="now" class = "java.util.Date"></bean>
</beans>

5、运行我们的Client文件

在这里插入图片描述点击左侧绿色三角run即可;下面我们来看一下运行结果:
在这里插入图片描述
好了,到此为止我们就对Spring中的依赖注入的第一种方法:构造函数注入进行了学习,之后我还会记录属性注入的学习,请持续关注o!
(欢迎各位朋友进行评论关注转发,若文中出现错误,还烦请您指正,我们一起交流一起进步!)

猜你喜欢

转载自blog.csdn.net/qq_40096391/article/details/105619966