Spring依赖注入类型
!!!学习笔记记录!!!
一、概念:
在Spring中实现IoC(控制反转)容器的方法是依赖注入(DI)。
依赖注入的作用就是在使用Spring框架创建对象时,动态地将其所依赖的对象注入Bean组件中,其实现方式通常有两种,一种是属性setter方法注入,另一种是构造方法注入。
二、构造函数注入:
构造方法注入:指IoC容器使用构造方法注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表着一个依赖。
1.新建Maven项目后:新建dao包,service包,test包,创建Spring配置文件
2.在dao包中创建TestDIDao接口和接口实现类TestDIDaoImpl.
创建dao包的目的是在service中使用构造方法依赖注入TestDIDao接口对象
TestDIDao接口:
package org.exampletest.dao;
public interface TestDIDao{
public void sayHello();
}
TestDIDao接口实现类TestDIDaoImpl:
package org.exampletest.dao;
public class TestDIDaoImpl implements TestDIDao{
@Override
public void sayHello() {
System.out.println("TestDIDao say :Hello,Study hard!");
}
}
3.在service包中,创建TestDIService接口和接口实现类TestDIServiceImpl
在TestDIServiceImpl中使用构造方法依赖注入TestDIDao接口对象。
TestDIDaoService接口:
package org.exampletest.service;
public interface TestDIService{
public void sayHello();
}
TestDIDaoService接口类TestDIServiceImpl:
package org.exampletest.service;
import org.exampletest.dao.TestDIDao;
public class TestDIServiceImpl implements TestDIService{
private TestDIDao testDIDao;
//构造方法,用于实现依赖注入接口对象testDIDao
public TestDIServiceImpl(TestDIDao testDIDao){
super();
this.testDIDao = testDIDao;
}
@Override
public void sayHello(){
//调用testDIDao中的sayHello方法
testDIDao.sayHello();
System.out.println("TestDIService 构造方法注入say:Hello,Study Hard!");
}
}
4.编写配置文件
<?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 = "org.exampletest.dao.TestDIDaoImpl"/>
<bean id = "testDIService" class = "org.exampletest.service.TestDIServiceImpl">
<constructor-arg index="0" ref = "myTestDIDao"/>
</bean>
</beans>
constructor-arg元素用于定义类构造方法的参数,index用于定义参数的位置,ref指定某个实例的引用,如果参数是常量值,ref由value代替。该代码的构造参数中只有一个参数,位置是”0“.
5.在test包中创建测试类TestDI:
import org.exampletest.service.TestDIService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestDI {
public static void main(String[] args){
//初始化Spring 容器ApplicationContext,加载配置文件
ApplicationContext appCon =new ClassPathXmlApplicationContext("applicationContext.xml");
//通过容器获取testDIService实例,测试构造方法注入
TestDIService ts = (TestDIService)appCon.getBean("testDIService");
ts.sayHello();
}
}
图:
三、使用属性的setter方法注入:(最主流的注入方式)
指IoC容器使用setter方法注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean后,再调用该Bean的setter方法,即可实现基于setter方法的依赖注入。
1.在service包下创建一个接口实现类TestDIServiceImpl1
在上面代码的基础上,使用属性的setter方法依赖注入TestDIDao接口对象
package org.exampletest.service;
import org.exampletest.dao.TestDIDao;
public class TestDIServiceImpl1 implements TestDIService{
private TestDIDao testDIDao;
public void setTestDIDao(TestDIDao testDIDao){
this.testDIDao = testDIDao;
}
@Override
public void sayHello(){
//调用testDIDao中的sayHello方法
testDIDao.sayHello();
System.out.println("TestDIService setter方法注入say:Hello,Study Hard!");
}
}
2.配置文件:
将TestDIServiceImpl1类托管给Spring,让Spring创建其对象,同时调用TestDIServiceImpl1类的setter方法完成依赖注入。
<bean id = "testDIService1" class = "org.exampletest.service.TestDIServiceImpl1">
<property name = "testDIDao" ref="myTestDIDao"/>
</bean>
3.在测试类TestDI中添加测试代码:
TestDIService ts1 = (TestDIService)appCon.getBean("testDIService1");
ts1.sayHello();
图:
原文地址:https://blog.csdn.net/qq_74474809/article/details/143643503
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!