IOC概念理解
ioc:Inversion of control。又名:控制反转。它是一种设计思想。在开发中,ioc意味着将依赖对象交给容器控制,而不是传统的在对象中直接控制。
在以往的时候,我们使用依赖对象,都是通过new一个对象出来,对象之间进行耦合。随着系统的复杂,对象之间的耦合度越高,系统改造、维护等都会带来一定障碍。而且也与软件设计的低耦合目标不一致。为了解决对象之间耦合度过高的问题,spring的ioc框架出炉了。
控制反转,是相对于“正”,才有“反”的说法。什么是“正”呢?正是指,对于依赖对象主动的去创建,去控制,什么时候创建、使用,是由程序主动控制的。反则是指,由容器来帮忙创建和注入依赖对象。由原来的主动,变为被动接受,所以是反转。
控制反转,又名:依赖注入。依赖注入是指程序运行期间,动态的向某个对象提供它所需要的其它对象。控制反转和依赖注入是从不同角度描述的同一件事,那就是:通过引入IOC容器,通过依赖注入的方式,实现对象之间的解耦。
spring注入的三种方式
1.属性注入2.构造方式注入3.工厂方式注入
1. 属性注入
属性注入是通过setter的方法注入到bean对象的属性值中的。使用标签
如:对应的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对象的属性值或者依赖对象,可以在实例化后,直接使用,相当于有默认值。
构造注入使用标签
]]>
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之间还可以使用
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='小花'}]}
最后
我保证我写的都是经过验证的,欢迎关注和交流。