Spring的依赖注入DI

依赖注入:它与控制反转的含义相同,只不过这两个称呼是从两个角度描述同一个概念。可以这样理解DI的概念:如果一个对象A需要使用另一个对象B才能实现某个功能,这时就说A对象依赖于B对象,而spring容器创建A对象,会自动将A对象需要的B对象注入到A对象中,此过程就是依赖注入。

依赖注入的作用就是使用Spring框架创建对象时,动态地将其所依赖的对象注入到Bean组件中。
依赖注入有三种实现方式:setter注入、构造方法注入、接口注入(Spring容器不支持接口注入)。

1.setter注入(在实际开发中,通常使用):指IoC容器使用setter方法来注入依赖的实例。通过调用无参构造器或无参static工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter的DI。
2.构造方法注入:指IoC容器使用构造方法来注入被依赖的实例。基于构造器的DI通过调用带参数的构造方法来实现,每个参数代表一个依赖。

利用setter注入方法的实例:

UserService.Java

package cn.ioc;
public interface UserService {
 public void addUser();
}
UserServiceImpl.java

package cn.ioc;
public class UserServiceImpl implements UserService {
	//使用UserDao接口声明一个对象
	private UserDao userDao;
	//添加UserDao对象的set方法,用于依赖注入
	public void setUserDao(UserDao userDao){
		this.userDao = userDao;
	}
	//实现userService中的方法
	@Override
	public void addUser() {
		this.userDao.save(); 
		//调用UserDao中的save()方法
		System.out.println("spring:hello user Service");
	} 
}
 
  

 在applicationContext.xml中的配置 
  



  	
  	
  	
 	 
  	
	  
 	 
TestApp中
package cn.ioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestApp {
@Test
	public void demo1(){
		//1.定义配置文件路径(此处代表在类路径中)
		String xmlPath = "applicationContext.xml";
		//2.初始化spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		//3.通过容器获取userDao实例
		UserDao userDao = (UserDao) applicationContext.getBean("userDao");
		//4.调用userDao的save()方法
		userDao.save();
	}
/**
	@Test
	public void demo2(){
		//1.定义配置文件路径(此处代表在类路径中)
		String xmlPath = "applicationContext.xml";
		//2.初始化spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		//3.通过容器获取userDao实例
		UserService userService =  (UserService) applicationContext.getBean("userService");
		//4.调用userDao的save()方法
		userService.addUser();
	}
**/
}
控制台输出
spring: hello user dao
spring: hello user Service









你可能感兴趣的:(Spring框架)