《SSM框架系统学习》(2) - Spring IoC 依赖注入的类型

版权声明:转载请注明出处! https://blog.csdn.net/yxw908186797/article/details/88257002

先简述一点概念。
Spring中实现IoC容器的方法是依赖注入,依赖注入的作用是在使用Spring框架创建对象时动态地将其所依赖的对象(例如属性值)注入Bean组件中。
Spring框架的依赖注入有使用构造方法注入使用属性的sertter方法注入

代码准备工作

先写好被用的代码,目录结果看包名

package dao;
public interface TestDIDao {
	public void sayHello();
}

package dao.impl;
import dao.TestDIDao;
import org.springframework.stereotype.Service;
@Service
public class TestDIDaoImpl implements TestDIDao{
	@Override
	public void sayHello() {
		System.out.println("Hello, 关注我的博客吧!");
	}
}

package service;

public interface TestDIService {
	public void sayHello();
}

package service.impl;
import dao.TestDIDao;
import service.TestDIService;

public class TestDIServiceImpl implements TestDIService{
	private TestDIDao testDIDao;
	//构造方法,用于实现依赖注入接口对象 testDIDao
	public TestDIServiceImpl(TestDIDao testDIDao) {
		super();
		this.testDIDao = testDIDao;
	}
	@Override
	public void sayHello() {
		testDIDao.sayHello();
		System.out.println("TestDIService 构造方法注入 say : 请帮我点个赞 。");
	}
}

一、使用构造方法注入

在src根目录下创建Spring配置文件 applicationContext.xml 。
在文件中,先将 dao。TestDIDaoImpl类托管给Spring,让其创建对象。
再将servlce.TestDIServiceImpl类也托管给Spring,同时给构造方法传递参数。
记得看注释!
代码如下:
注意:<constryctor-arg> 用于定义类的构造方法的参数,index定义参数的位置,ref指定某个实例的引用(例如本示例是myTestDIDao)!

<?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">
	
	<!-- 将指定类TestDaoImpl配置给Spring,让Spring创建其实例 -->	
	<bean id="myTestDIDao" class="dao.impl.TestDIDaoImpl" />
	
	<!-- 使用构造方法注入 -->
	<bean id="testDIService" class="service.impl.TestDIServiceImpl">
		<!-- 将myTestDIDao通过构造函数注入到TestDIServiceImpl类的属性 testDIDao上-->
		<constructor-arg index="0" ref="myTestDIDao"/>
	</bean>
</beans>

在test包中创建测试类:

package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.TestDIService;
public class TestDI {
	public static void main(String[] args) {
		//这里不懂得话,看上一篇博客!
		ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
		//ͨ获取容器自动实例化的testDIService。IoC的作用就是这个!我们不需要再去new,再去传递构造函数的参数。
		TestDIService ts = (TestDIService)appCon.getBean("testDIService");
		ts.sayHello();
	}
}

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

二、使用属性的setter方法注入

学过JavaBean应该都知道Bean的get和set方法。
使用setter方法注入是Spring框架中最主流的注入方式。
TestDIServiceImpl中的sayHello方法略作修改并加上属性testDIDao的setter方法。

package service.impl;
import dao.TestDIDao;
import service.TestDIService;

public class TestDIServiceImpl implements TestDIService{
	private TestDIDao testDIDao;
	//setter方法
	public void setTestDIDao(TestDIDao testDIDao) {
		this.testDIDao = testDIDao;
	}
	@Override
	public void sayHello() {
		testDIDao.sayHello();
		System.out.println("TestDIService setter方法注入 say : 请帮我点个赞 。");
	}
}

1、 将TestDIServiceImpl托管给Spring,同时调用TestDIServiceImpl的setter方法完成依赖注入。将配置文件中的testDIService的bean部分改成如下:

< property >标签是sertter方法使用的标签,与<constryctor-arg>不同,需要注意!

<!-- 使用setter方法注入 -->
<bean id="testDIService" class="service.impl.TestDIServiceImpl">
		<!-- 调用TestDIServiceImpl类的setter方法,将myTestDIDao注入到 TestDIServiceImpl类的属性testDIDao上 -->
		<property name="testDIDao" ref="myTestDIDao"/>
</bean>

如果不会改,你需要再好好的理解一下XML的配置了!
2、
运行

package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.TestDIService;
public class TestDI {
	public static void main(String[] args) {
		//这里不懂得话,看上一篇博客!
		ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
		//ͨ获取容器自动实例化的testDIService。IoC的作用就是这个!我们不需要再去new,再去传递构造函数的参数。
		TestDIService ts = (TestDIService)appCon.getBean("testDIService");
		ts.sayHello();
	}
}

结果如下:

猜你喜欢

转载自blog.csdn.net/yxw908186797/article/details/88257002