1:Spring资源目录(resource)的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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
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>
2:控制反转IoC(Inversion of Control)
2.1:什么是控制反转?
控制反转就是将程序控制权由对象交给了交给容器,控制反转也是一个解耦合的过程(笔者通过一个在网上看到例子来说明)
解耦合:
传统的程序就像第一幅图一样,齿轮是彼此依赖的,如果一个齿轮出故障不转动了,整个程序就崩溃了,这就代表这耦合度过高;
控制反转就相当于第二幅图的第三方齿轮,其中一个齿轮就算出故障了,整个程序也不会崩溃,这就是所谓的解耦合;
控制反转的由来?
第二幅图就中的第三方就是IOC容器,控制权就在它手里,如果A对象需要一个D对象,但是因为第三方IOC容器的介入失去了与D对象的联系,那么A对象就会告诉IOC容器(第三方)我需要一个D对象,那么IOC容器就会将D对象创建并注入到A对象需要的地方,这时候就体现出了控制权在IOC手中。而第一幅图中,A对象需要一个D对象,他就会自己创建并添加 到自己需要的地方,控制权在自己手上。
综上所述:控制权由对象自己手上交给IOC容器来获得控制权,这就叫控制反转
2.2什么是依赖注入?
在博主看来依赖注入:就是给IOC容器创建的类赋予(注入)属性,接下来博主会给大家看一段代码来加深大家的理解
创建一个Person类
package com.kaifamiao.ioc.what;
import java.util.Calendar;
import java.util.Date;
/**
* @author 后来的老李
* @version 1.0
*/
public class Person {
//Person类的属性
//get和set
//无参构造和有参构造
//toString
}
添加resouce资源目录下的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="date" class="java.util.Date">
<constructor-arg type="long" value="946569600000"></constructor-arg>
</bean>
<bean id="person" class="com.kaifamiao.ioc.what.Person">
<property name="id" value="2022"></property>
<property name="personName" value="李唐天子李星云"></property>
<property name="gender" value="男"></property>
<property name="birthdate" ref="date"></property>
</bean>
</beans>
在XML文件中bean就是一个对象,这就是控制反转,开始第一段代码的Person是个类,现在IOC容器将会给我们创建对象(李唐天子李星云),而传统的我们要通过类去创建一个对象就需要去new一个对象(Person p=new Person()),然后再设置对象的属性,而依赖注入就是<property name="personName" value="李唐天子李星云"></property>,也就相当于p.setName(李唐天子李星云),一个意思,但是两者的不同在于,传统的是对象自己去赋值,而依赖注入是IOC容器创建好了对象,在给对象的属性注入值,所谓依赖就是对象所需要的值是通过依赖IOC容器注入的。
注意:控制反转是一种思想,依赖注入是一种模式,两者不能混为一谈。
以上是笔者自己的见解,有问题希望大家留言纠正;
星光灿烂,愿我们一同前行!