发布网友 发布时间:2022-04-21 01:06
共1个回答
热心网友 时间:2022-06-17 00:19
首先这就要谈到一个概念叫做IOC或者也可以叫做DI,只是相同事件不同角度的描述,DI(依赖注入)是实现,IOC(控制反转)是思想。通常情况下,我们创建一个类的实例对象都是自己new类的构造方法,自行创建一个对象,但是控制反转不同,我们把创建对象的工作交给spring容器去做,所以为此我们才需要在xml文件中去声明,我们可以依靠id去getBean(),容器又是如何创建对象的呢。在这里容器使用了java的反射机制,使用类的完全限定名.class可以拿到这个类的类对象的引用,使用类对象的newInstance,底层实际上还是调用类的无参构造方法(如果只有有参构造则需要在配置文件中写明construct-args,将应该注入的成员注入)生成该类的实例对象,这样就不需要我们自己去创建对象,直接从容器中取就可以。property指的是属性,name对应的是类中的属性名,ref则是需要注入的bean对象,上面就很清楚的可以看出来,id="doe_projectService"这个bean对象,含有一个叫做的属性,而这个的实现是ref="doe_projectDao",即id为"doe_projectDao"的bean提供的。另外属性注入的实现也使用了java的反射机制,即invoke(对象.方法())这里的方法是set方法