欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Spring】——IOC原理(二)

程序员文章站 2022-07-12 13:02:32
...

小编最近在学习Spring的内容,以小编的能力就是能理解什么程度,就先给朋友们展示到什么程度了,还请小伙伴们努力留下自己的宝贵建议和我一起探讨咯!

【IOC】

控制反转(Inverse of Control),java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用他的合作对象时,自己均要使用像new object() 这样的语法来完成合作对象的申请工作。你会发现:对象间的耦合度高了。

IOC的思想是:Spring容器来实现这些相互依赖对象的创建、协调工作。对象只需要关系业务逻辑本身就可以了。从这方面来说,对象如何得到他的协作对象的责任被反转了(IOC、DI)。

【IOC好处】

【Spring】——IOC原理(二)

【IOC与DI】

一、  IOC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系

举个例子:你找男友要有各种要求:有钱,智商A+,180mm,善言谈等条件

(1)传统的程序开发:我们要自己想办法自己设计和面对每个追帅哥的环节,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个),使用完之后还要将对象销毁,对象始终会和其他的接口或类耦合起来。

【Spring】——IOC原理(二)

(2)IOC开发:通过婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,合适就想出,不合适就抛出异常,婚介类似一个容器机构来控制。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

二、DI(Dependency Injection,依赖注入)

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI来实现的。比如对象A需要操作数据库,在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。

那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

【代码实现】

1、传统方式:

UserDao.java

package com.spring.tl.Dao;

/**
 * Created by 滕柳 on 2018/6/4.
 */
public interface UserDao {
	public void addUser(String username,String password);

}

UserDaoMysql.java

package com.spring.tl.Dao;

/**
 * Created by 滕柳 on 2018/6/4.
 */
public class UserDaoMysql implements UserDao {

	@Override
	public void addUser(String username, String password) {
		System.out.println("UserDaoMysql");
	}



}

UserManager.java

public interface UserManager {
	public void addUser(String userName,String password);
}

UserManagerImp.java

public class UserManagerImp implements UserManager {

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

client.java

		/**
* Created by 滕柳 on 2018/6/4.
*/
public class Client {
public static void main(String[] args) {
	UserManager userManager=new UserManagerImp();
	userManager.addUser("tl","123");
}


}

2、IOC:将对象注入到IOC容器中

(1)通过构造方法实现的注入,有侵入性,不建议使用

UserManagerImp.java

/**
 * Created by 滕柳 on 2018/6/4.
 */
public class UserManagerImp implements UserManager {

	private UserDao userDao;
        //通过构造方法实现的注入,有侵入性,不建议使用
	public UserManagerImp(UserDao userDao) {
		this.userDao = userDao;
	}
	@Override
	public void addUser(String userName, String password) {
		//由我们的应用程序负责服务(对象)定位
	   // UserDao userDao=new UserDaoMysql();
		userDao.addUser(userName,password);
	}
}

Application.xml

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

<bean id="userDaoMySql" class="com.spring.tl.Dao.UserDaoMysql"/>
<bean id="userManager" class="com.spring.tl.manager.UserManagerImp">
	<constructor-arg ref="userDaoMySql"></constructor-arg>     <--配置构造器-->
</bean>
</beans>

client.java

【Spring】——IOC原理(二)

(2) 通过setter注入---必须要有无参数的构造器(可以不写,如果写一定要有无参数的构造器)

UserManagerImp.java

【Spring】——IOC原理(二)

Application.xml

【Spring】——IOC原理(二)

【总结】

今天小编主要是对传统和用Spring IOC进行比较就先讲解到这里了,我们下面的内容会更加精彩哦!请继续关注!!






相关标签: spring IOC