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基础:依赖注入的实现的主要内容,如果未能解决你的问题,请参考以下文章