SSH之Spring——IOC如何实现依赖注入

一、什么是IOC   

       IOC(Inversion of Control)控制反转,轻量级的Spring框架的核心,管理对象。就是一个对象如何获取所依赖对象的引用,责任的反转。本来由应用程序管理对象之间的依赖关系,现在交给了容器管理,这叫控制反转。即交给了IOC容器,Spring的IOC容器主要使用注入方式实现,不需要主动查找,对象的查找、定位和创建都由容器管理。

二、准备工作

       根据类图建立类,关系如下:

     

三、一般的实现方式

      UserManager依赖UserDao,它要主动实例化类,用应用程序负责定位类,这是咱们平时的操作:

public class UserManagerImpl implements UserManager {

	public void addUser(String username, String password) {
		//由我们的应用程序负责服务(对象)定位
		UserDao userDao = new UserDao4MySqlImpl();
		userDao.addUser(username, password);
	}

}
     客户端同样也要实例化UserManager的实现类

public class Client {

	public static void main(String[] args) {

		//由我们的应用程序负责服务(对象)定位
		UserManager userManager = new UserManagerImpl();
		userManager.addUser("zhangdan", "123");
		
	}

}

   

四、IOC容器实现方法

    spring管理我们对象的创建和依赖,必须将依赖关系配置到spring的核心配置文件(applicationContext.xml)

1.用构造函数法

   也就是通过构造函数将UserDao实现注入过来

先看配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
	     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	     xmlns:aop="http://www.springframework.org/schema/aop"
	     xmlns:tx="http://www.springframework.org/schema/tx"
	     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
                 
		<bean id="userDao4MySql" class="com.zx.spring.dao.UserDao4MySqlImpl"/>
		<bean id="userDao4Oracle" class="com.zx.spring.dao.UserDao4OracleImpl" />
			
		<bean id="userManager" class="com.zx.spring.manager.UserManagerImpl" >
			<!--  构造方法 -->
			<constructor-arg ref="userDao4Oracle"/>	    
		    			
		</bean>
		
		
</beans>
     配置文件中将DAO的实现类配置过来,其中id是唯一标识,在配置UserManager时,配置Dao引用即ref,它的值是实现类的id


UserManager的实现类如何通过构造函数实现注入

public class UserManagerImpl implements UserManager {

	private UserDao userDao;

	public UserManagerImpl(UserDao userDao) {

		this.userDao = userDao;
	}

	public void addUser(String username, String password) {

		userDao.addUser(username, password);
	}

}

   构造函数中将Dao作为参数传递实现注入

客户端的代码如下

public class Client {
	public static void main(String[] args) {
		
		//请求IOC容器
		BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		UserManager userManager = (UserManager)factory.getBean("userManager");
		
		userManager.addUser("zhangdan", "123");
	}
}


2.setter方法

     以设值的方式实现注入

配置文件如何配置

<bean id="userManager" class="com.zx.spring.manager.UserManagerImpl" >
	<!-- setter方法 -->
	<property name="userDao" ref="userDao4MySql"/>
			
</bean>
     name的值是setUserDao的方法名字,去掉set并且首字母小写,只是与引用的名字形同而已,这个地方要注意。


UserManager的实现类如何通过构造函数实现注入

public class UserManagerImpl implements UserManager {

	private UserDao userDao;

	public void addUser(String username, String password) {

		userDao.addUser(username, password);
	}
        //setter方法
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

}
    客户端的实现相同,这里不重复写。

五、总结

1.方法没有好与坏,适合的就是最好的。构造函数法适用于类初始化就要传递参数,但是如果参数很多不建议用,建议使用setter方法。

2.IOC容器很好的解耦,将一般实现中耦合部分放到xml文件中,不用应用程序维护依赖关系,即将接口实现注入到需要的类中,依赖关系的形成利用反射机制。

3.大量减少了Factory和单例的数量,使代码更加清晰,主要原因是我们不再查找、定位、创建和管理对象之间的依赖关系,都交给IOC容器管理


      对Spring的学习刚开始,如果有理解错误的地方请多多指教。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值