1、IOC(inversion of control):ioc有两种方式,DI(dependecy injection)和DL,dl( dependency lookup),前者是当前软件实体被动接受其依赖的其他组件被ioc容器注入,后者则是当前软件实体主动去某个服务注册地查找依赖的哪些服务。

2、spring ioc容器的依赖注入流程:1、收集和注册。通过xml或java代码的方式定义一些bean,通过手动组装或让容器基于某些机制自动扫描的形式,把这些bean收集到ioc容器中。通过xml方式收集并注册单一bean,形式如下: <bean id="mySpringMvc" class="com.myproject.springmvc.MySpringMvc"/>可以通过xml schema形式的配置进行批量扫描并采集和注册。<context:component-scan base-package="com.myproject"/>2、分析和组装: ioc容易收集并注册完bean之后,会根据它们之间的依赖关系先后组装它们。

3、JavaConfig配置类:JavaConfig配置形式。类上打上@Configuration注解,表示JavaConfig配置类。等同于XML文件中的beans。通过@Bean标注的方法,其返回值作为一个bean定义注册到IoC容器,方法名默认成为该bean的id,也可以重命名bean;并可指定initMethod和destroy方法。等同于XML文件中的bean。bean的依赖,直接调用JavaConfig类中依赖bean的创建方法即可。如图所示,myservice直接调用了dependencyService()方法。

4、测试类:使用AnnotationConfigApplicationContext初始化上下文,通过getBean方法获取实例对象,并调用其方法。获取多个对象实例,并判断是否为同一个对象。

5、测试结果:结果中,初始化了bean,并调用了init()方法。2次创建的dependencyService对象并不相同。

6、JavaConfig其他Annotation: 比如@ComponentScan,等同于XML中的<context:component-scan/>元素,用于批量采集并注册bean至ioc容器中。@PropertySource用于加载*.properties文件属性到IoC容器中。@Import,等同于XML中的<import resource="x.xml"/>元素,只负责引入JavaConfig形式的Ioc容器配置。@ImportResource可以引入xml文件至JavaConfig配置的容器中。