Spring核心机制-控制反转

Spring是以控制文件来管理java实例的,这种方式有一个极其隐晦的名字,叫做控制反转(Inversion of Contrul) IoC,后来又有了一个相对较容易理解的名字叫做依赖注入.

不管是控制反转还是依赖注入,意思是一样的,就是通常一个Java实例需要调用另一个Java实例的时候,通常是由调用者来创建被调用者的实例.

但是在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此叫做控制反转.创建被调用者的实例是由Spring容器来完成,然后注入被调用者,因此又叫作依赖注入.

所谓依赖注入,就是当程序中需要另一个对象的属性或者方法时.无需在代码中创建该对象.而是依赖外部容器注入.Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO依赖关系的管理.

依赖注入通常有两种方式

1.设置注入:IoC容器使用属性的setter方法来注入被依赖的实例

2.构造注入:IoC容器使用构造器来注入被依赖的实例

 

下面看看代码

SpringTest.java

package springtest;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
		System.out.println(ctx);

		PersonService p = ctx.getBean("personservice",PersonService.class);
	//这段代码并不是创建Person实例,而是通过spring配置文件来获取person实例	
		p.info();
	}
}

PersonService.java这个可以不是标准的Bean,Spring可以管理任意的POJO,并不要求Java类是一个标准的javabean

package springtest;

public class PersonService {
	private String name;
	public void setName(String name){
		this.name = name;
	}
	public void info(){
		System.out.println("这个人的名字  "+name);
	}
}

bean.xml片段

<bean id = "personservice" class="springtest.PersonService">
	<property name="name" value="wawa"></property>
	</bean>

spring容器不仅可以创建person实例,而且该person实例的的name值有了属性值,这些都是spring容器的作用,Spring容器根据配置文件信息来创建person实例,并为person实例设置属性值,这种由spring容器为对象设置属性值的方法称为控制反转

发表评论

电子邮件地址不会被公开。 必填项已用*标注