IOC(控制反转)
解释
控制
控制对象的创建,属性的赋值,依赖关系的管理。以及对象从创建到销毁的整个生命周期。
反转
把开发人员在代码中创建的权限交给代码之外的Spring容器,Spring框架可以说是一个工厂,可以生产管理Java对象,当我们需要用到对象时可以直接从Spring容器中获取就行,不用再自己创建。
技术实现
DL
依赖查找。
DI
依赖注入,我们在代码中只需要提供对象的名称,对象的获取、赋值都由容器自己完成。若追究Spring框架的底层原理则是Java的反射机制。
Spring的IOC原理图

举例
编写Java对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class School { private String name; private String address;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
@Override public String toString() { return "School{" + "name='" + name + '\'' + ", address='" + address + '\'' + '}'; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| public class Student { private String name; private int age;
private School school;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public School getSchool() { return school; }
public void setSchool(School school) { System.out.println("setSchool:"+school); this.school = school; }
@Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", school=" + school + '}'; } }
|
XML配置文件
1 2 3 4 5 6 7 8 9 10
| <bean id="myStudent" class="com.zlt.bean02.Student"> <property name="name" value="李四"/> <property name="age" value="20"/> <property name="school" ref="myschool"/> </bean> <bean id="myschool" class="com.zlt.bean02.School"> <property name="name" value="北京大学"/> <property name="address" value="北京"/> </bean>
|
主类调用
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class App { public static void main(String[] args){ String config = "applicationContext.xml"; ApplicationContext ctx = new ClassPathXmlApplicationContext(config); SomeService student = (SomeService) ctx.getBean("myStudent"); System.out.println(student); } }
|
优点
Spring框架可以说是一个工厂,可以生产管理Java对象,当我们需要用到对象时可以直接从Spring容器中获取就行,不用再自己创建。以此也达到了解耦合的目的。