标签:exce context person 调用 spring容器 contex 波特 tpi rgs
30岁的小曹,20岁的身体,还在坚持在能力允许控制范围内22点睡觉,5点起床锻炼身体,好好学习,除了加班或者像今天这样的深夜,再一次写已经有X百万人写过的 spring Ioc 的总结博客。
一、IOC 控制反转详解:
1).传统非spring管理时候的对象间调用依赖:
我们都知道,随便一本破框架的破书上都说Spring的核心之一IOC-控制反转,控制反转是管理bean的,什么是bean?一切java对象。java对象怎么来的? A a = new A(),New出来的。
那么我们定义个 Pig 类:
public class Pig
{
public String eat()
{
return "猪会吃!";
}
}
我们在定义一个类: Person
public class Person
{
private Pig pig;
public void setPig(Pig pig)
{
this.pig pig;
}
public void usePig()
{
System.out.println("我打算去喂猪!");
System.out.println(pig.eat());
}
}
测试:
public class BeanNSTest
{
public static void mian(String[] args)throws Exception {
Pig pig = new Pig();
Person person = new Persion();
person.setPig(pig);
person.usePig();
}
}
我打算去喂猪!
猪会吃!
//上面介绍的是java传统方式,调用者person主动去创建被依赖对象pig,然后在去调用被依赖对象pig的方法eat。比如上面 Person 主动创建对象pig,然后调动pig.eat()输出。
2). 使用spring 后,spring管理bean是通过用XML配置文件之间管理bean的,例如上面的人和猪的依赖关系:
bean.xml
<bean id="person" class="com.test.Person">
<property name="pig" ref="pig">
</bean>
<bean id="pig" class=“com.test.Pig”>
//<property>中name="pig"的pig是 Person方法中setPig的方法,ref="pig"的pig是setPig的参数;
public class BeanTest
{
public static void mian(String[] args)throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
Person p = ctx.getBean("person",Person.class)
p.usePig();
}
}
//结果:
我打算去喂猪!
猪会吃!
从第二种测试结果来看:使用spring框架后,调用者无需主动获取被依赖对象,只需要被动接受spring容器为调用者的成员变量赋值即可(配置文件property),由此可见,使用spring后 调用者获取被依赖对象的方式由原来的主动获取,变成了 被动接受。于是Rod Johnson【绕波特 . 真桑】将这种方式称为控制反转 IOC。
一、DI依赖注入 超级详解:
1). 因为spring容器 将依赖对象注入给了调用者(通过配置文件),所以调用者无需 主动获取被依赖对象,只要被动等待spring容器注入即可。所以 Martine Fowler【马蹄 . 弗劳尔】 称者叫依赖注入DI。
所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI,所以spring IOC控制反转就是依赖注入DI。重要的事情说4遍。
当然spring发展到今天已经由原来的xml配置,改成代码里面注解方式了,更方便点。后续有空再给介绍下,希望未来有人会看到。
30岁的小曹,20岁的身体,go ahead!
标签:exce context person 调用 spring容器 contex 波特 tpi rgs
原文地址:https://www.cnblogs.com/belen87/p/9249105.html