Spring基础:依赖注入的实现

Posted nuist__NJUPT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring基础:依赖注入的实现相关的知识,希望对你有一定的参考价值。

Spring基础:依赖注入的实现

控制反转(IOC)是一个抽象的概念,是Spring框架的核心,用来消减计算机程序的耦合问题,其实就是控制权由调用者转换给Spring容器。
依赖注入(DI):Spring容器创建对象时,将其所依赖的对象注入都Bean中。
依赖注入有两种方式,一种是使用构造方法注入,另一种是使用属性的setter()方法注入。
开发环境我使用的Eclipse,使用IDEA也是一样的,不在赘述。
1.使用Eclipse创建web项目ch12,导致导入相关的5个JAR包.在这里插入图片描述
2.在src目录下创建dao包,并在包中创建接口TestDIDao和接口实现类TestDIDaoImpl.(创建dao包的目的是在service包中使用构造方法依赖注入TestDIDao接口对象)

public interface TestDIDao {
	public void sayHello() ;
}
public class TestDIDaoImpl implements TestDIDao{
	@Override
	public void sayHello() {
		System.out.println("TestDao say : hello, Study hard !") ;
	}
}

3.在src目录下创建service包,并在该包中创建TestDIService接口和TestDIServiceImpl实现类。在TestDIServiceImpl类中依赖注入TestDIDao接口对象。

public interface TestDIService {
	public void sayHello() ;
}
import dao.TestDIDao;

public class TestDIServiceImpl implements TestDIService{
	private TestDIDao testDIDao ;
	//使用构造方法依赖注入接口对象TestDIDao
	public TestDIServiceImpl(TestDIDao testDIDao) {
		this.testDIDao =testDIDao ;
	}
	@Override
	public void sayHello() {
		testDIDao.sayHello() ; //嗲平庸testDIDao中的sayHello()方法
		System.out.println("TestDIService构造方法注入 say : Study hard!" ) ;
	}
}

4.在src目录下创建配置文件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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id = "myTestDIDao" class = "dao.TestDIDaoImpl" />
<!-- 使用构造方法注入 -->
<bean id = "testDIService" class = "service.TestDIServiceImpl">
<!-- 将myTestDIDao注入到TestDIServiceImpl类的属性testDIDao上 -->
<constructor-arg index = "0" ref = "myTestDIDao"/>
</bean>
</beans>

5.在src目录下创建test包,并在该报中创建测试类TestDI

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

import service.TestDIService;

public class testDI {
	public static void main(String[] args) {
		//初始化Spring容器,加载配置文件
		ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml") ;
		//通过spring容器获取testDIService实例,测试构造方法
		TestDIService ts = (TestDIService) appCon.getBean("testDIService") ;
		ts.sayHello() ;
	}
}

使用构造方法完成依赖注入,结果如下:
在这里插入图片描述
接下来,使用属性的setter方法实现依赖注入
6.在service报中创建实现类TestDIServiceImpl1,在该类中使用属性的setter方法依赖注入TestDao接口对象

import dao.TestDIDao;

public class TestDIServiceImpl1 implements TestDIService {
	private TestDIDao testDIDao ;
	//使用属性的setter()方法完成依赖注入
	public void setTestDIDao(TestDIDao testDIDao) {
		this.testDIDao = testDIDao ;
	}
	@Override
	public void sayHello() {
		testDIDao.sayHello() ;
		System.out.println("TestDIDaoService setter方法注入 : hello , Study hard !") ;
	}
}

7.在applicationContext.xml文件中配置,将TestDIServiceImpl1类托管给Spring,让Spring创建其对象,并调用该类的setter()方法完成依赖注入。

<?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 = "myTestDIDao" class = "dao.TestDIDaoImpl" />
<!-- 使用构造方法注入 -->
<bean id = "testDIService" class = "service.TestDIServiceImpl">
<!-- 将myTestDIDao注入到TestDIServiceImpl类的属性testDIDao上 -->
<constructor-arg index = "0" ref = "myTestDIDao"/>
</bean>
<bean id = "testDIService1" class = "service.TestDIServiceImpl1">
<!-- 将myTestDIDao注入到testDIServiceImpl1类的testDIDao属性上 -->
<property name="testDIDao" ref = "myTestDIDao"></property> 
</bean>
</beans>

3.在test包中的测试类testDI中编写测试代码

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

import service.TestDIService;

public class testDI {
	public static void main(String[] args) {
		//初始化Spring容器,加载配置文件
		ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml") ;
		//通过spring容器获取testDIService实例,测试构造方法
		TestDIService ts = (TestDIService) appCon.getBean("testDIService") ;
		//通过Spring容器获取testDIService实例,测试setter方法注入
		TestDIService ts1 = (TestDIService) appCon.getBean("testDIService1") ;
		ts.sayHello() ;
		ts1.sayHello() ;
	}
}

测试结果如下:
在这里插入图片描述

以上是关于Spring基础:依赖注入的实现的主要内容,如果未能解决你的问题,请参考以下文章

Spring基础:依赖注入的实现

Spring基础--- Spring基础配置

spring基础

Spring Boot实战 Spring基础

Spring之基础

Java Web系列:Spring依赖注入基础