spring------ioc理解

IOC概念理解

   ioc:Inversion of control。又名:控制反转。它是一种设计思想。在开发中,ioc意味着将依赖对象交给容器控制,而不是传统的在对象中直接控制。

   在以往的时候,我们使用依赖对象,都是通过new一个对象出来,对象之间进行耦合。随着系统的复杂,对象之间的耦合度越高,系统改造、维护等都会带来一定障碍。而且也与软件设计的低耦合目标不一致。为了解决对象之间耦合度过高的问题,spring的ioc框架出炉了。

   控制反转,是相对于“正”,才有“反”的说法。什么是“正”呢?正是指,对于依赖对象主动的去创建,去控制,什么时候创建、使用,是由程序主动控制的。反则是指,由容器来帮忙创建和注入依赖对象。由原来的主动,变为被动接受,所以是反转。

   控制反转,又名:依赖注入。依赖注入是指程序运行期间,动态的向某个对象提供它所需要的其它对象。控制反转和依赖注入是从不同角度描述的同一件事,那就是:通过引入IOC容器,通过依赖注入的方式,实现对象之间的解耦。

spring注入的三种方式

1.属性注入2.构造方式注入3.工厂方式注入

1. 属性注入

   属性注入是通过setter的方法注入到bean对象的属性值中的。使用标签,name指定bean属性名,value指定属性值。属性的注入是通过对象中的set方法注入。如:定义一个Teacher类,有属性name和age,则注入是通过setName()和setAge()两个方法注入的。bean属性,要与对象中的set方法一一对应。

如:对应的Teacher对象中:

publicclassTeacher {privateStringname;privateStringage;publicvoidsetName(Stringname) {this.name = name;    }publicStringgetName() {returnname;    }publicvoidsetAge(Stringage) {this.age = age;    }publicStringgetAge() {returnage;    }

对应的测试类:

@Testpublicvoidtest001(){        ApplicationContext ctx =newClassPathXmlApplicationContext("beans.xml");        Teacher teacher = (Teacher) ctx.getBean("teacher");        System.out.println(teacher);    }

测试结果为:

Teacher{name='王老师',age='22'}

2. 构造注入

   构造方法注入bean对象的属性值或者依赖对象,可以在实例化后,直接使用,相当于有默认值。

   构造注入使用标签,这个标签中没有name,有value,通过value为属性值赋值。其中注入属性的个数一定与构造函数的参数一一对应。在这个标签中,还可以使用type指定参数类型,如遇到特殊字符,可使用包裹。 如:Dog类的bean配置文件

]]>

Dog的构造函数

publicclass Dog {privateStringcolor;privateStringname;publicDog(Stringname,Stringcolor){this.name = name;this.color=color;    }

测试类

@Testpublicvoidtest002(){        ApplicationContext ctx =newClassPathXmlApplicationContext("beans.xml");        Dog dog = (Dog) ctx.getBean("dog");        System.out.println(dog);    }

执行结果:

Dog{color='<小黄>',name='白色'}

   bean之间还可以使用的ref属性建立bean之间的引用关系。如:为teaher这个bean关联上dog,。在执行结果中,可以看到:

Teacher{name='王老师',age='22',dog=Dog{color='<白色>',name='小黄'}}

对list集合的属性注入

]]>

在对象Teacher中加上private List dogs;的set和get方法。执行以后得到的结果为:

Teacher{name='王老师',age='22',dog=null, dogs=[Dog{color='<白色>',name='小黄'}, Dog{color='黑色',name='小黑'}, Dog{color='花色',name='小花'}]}

最后

我保证我写的都是经过验证的,欢迎关注和交流。

你可能感兴趣的:(spring------ioc理解)