一、

1.什么是IOC与DI

IOC:控制反转,将对象的创建权反转给了Spring。

DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。

二、IOC——控制反转

1.为什么要使用IOC呢?

我们来看代码:

接口:

Spring 的IOC与DI的认识

实现类:

Spring 的IOC与DI的认识

传统使用方式:通过new关键字来创建对象。

Spring 的IOC与DI的认识

这里不难看出,代码之间具有很高的耦合度。如果我们需要更换接口的实现类,例如 UserDao u = new  UserDaoHibernateImpl(),那就需要更改很多代码!

(左边是问题,右边是解决方案)如图:右边是IOC的底层实现原理

Spring 的IOC与DI的认识

我们把所有的实现类都交给Spring管理,我们需要时直接从Spring容器中获取。目的就是为了实现代码之间的解耦合,使得代码具有高扩展性。

2.如何让Spring来管理实现类呢?

创建applicationContext.xml文件,这是Spring默认的文件名字,也可以随便起一个。

<?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="userDao" class="com.spring.demo1.UserDaoImpl">
      
    </bean>

</beans>

 3.重新编写测试类

@Test
	public void demo2() {
		//解析xml文件,创建Spring工厂
	  ApplicationContext applicationContext =new ClassPathXmlApplicationContext("applicationContext.xml");
	UserDao userDao = (UserDao)applicationContext.getBean("userDao");
	userDao.save();
	}

 

三、DI ——依赖注入

1.什么是依赖?

Class A{}

Class B{

private Spring name;

         public void xxx(A a){}

}

这里的 Class B 就依赖了属性 name 和 ClassA.

2.更改实现类,让其有依赖关系

public class UserDaoImpl implements UserDao {

	private String name;//UserDaoImpl依赖了一个字符串名字为name的属性。

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public void save() {

		System.out.println("开始执行save()");

	}

}

传统的设置值:

	@Test
	public void demo1() {
		UserDao u =new UserDaoImpl();
		//u.set("XXX")这里是错误的,因为UserDao 没有set方法  所以要 用  UserDaoImpl u= UserDaoImpl();
		u.save();
		System.out.println();
	}

3.更改applicationContext.xml文件

<?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="userDao" class="com.spring.demo1.UserDaoImpl">
      <property name="name" value="张三"></property>
    </bean>

</beans>

测试:

Spring 的IOC与DI的认识

张三 出来了。

我们在创建实例的过程中,Spring的DI就帮我们把UserDaoImpl类的属性name注入 张三。

相关文章:

  • 2021-07-07
  • 2021-05-04
  • 2021-05-22
  • 2021-11-14
  • 2021-12-29
  • 2021-10-01
  • 2021-07-27
  • 2021-05-13
猜你喜欢
  • 2021-12-03
  • 2021-06-07
  • 2021-06-14
  • 2021-09-17
  • 2022-12-23
  • 2021-07-31
  • 2021-12-28
相关资源
相似解决方案