在上一节中我们谈到了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!
(欢迎各位朋友进行评论关注转发,若文中出现错误,还烦请您指正,我们一起交流一起进步!)