Spring 的IOC与DI的认识

一、

1.什么是IOC与DI

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

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

二、IOC——控制反转

1.为什么要使用IOC呢?

我们来看代码:

接口:

实现类:

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

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

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

我们把所有的实现类都交给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的DI就帮我们把UserDaoImpl类的属性name注入 张三。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值