Spring之IoC
IoC:
概念:Inversion of Control,控制反转,IOC不是一种技术而是一种设计思想。传统应用程序中获取依赖对象通过new一个对象来实现,应用程序是主动创建;现在容器来帮忙创建及注入依赖对象,应用程序被动接收
作用:降低类之间的耦合度,继而提高灵活性、可维护性。
Spring的IoC:
所谓IoC容器,其实就是 BeanFactory(顶层接口),ApplicationContext(BeanFactory的子类),WebApplicationContext(针对web应用的容器)。
所谓Bean其实就是被Spring容器所管理的一个对象。Bean与Bean之间的依赖关系反应在一个容器的配置元数据中。
ApplicationContext作为容器,根据配置元数据,对其所管理的Bean进行初始化、配置、组装。配置元数据可以是XML、Java 注解、Java代码。

在应用启动的过程中,Spring就会完成Bean的初始化、配置、组装等工作:
1、扫描Java代码,读取配置元数据:XML、Java 注解、Java代码;
2、创建Bean:利用反射技术将标注了@Compoent、@Controller、@Service等的类进行对象实例化,每个bean可以配置自己的作用域,默认为单例,即一个Spring容器中(也就是一个JVM中)对一个类只创建一个对象;
3、组装Bean:然后根据@Autowired、@Resource等注解,将依赖的Bean注入进来,如果遇到循环依赖的方式,会通过“半成品”的方式,先组装再完善。
1、IOC是什么?
Inversion of Control,控制反转,它的核心思想是把对象的管理权限交个了容器,应用程序如果使用摸个对象实例,直接从IOC容器里获取就可以了。
这种设计的好处是:减低了对象之间的耦合度,提高了灵活性
2、bean的声明方式
1>在xml位置文件中,通过<bean>的标签
2>通过注解 @Compoent、@Controller、@Service
3>通过@Configuration配置里面的@bean注解
spring启动的时候会解析这些bean,然后保存的IOC容器里面
3、IOC的工作流程


DI(依赖注入)
spring提供了三种方式来依赖注入,有构造方法注入,setter方法注入以及接口注入。使用构造方法注入需要注意的一点就是要避免循环依赖。所谓的循环依赖指的就是在A对象的构造方法中Spring要注入B,而在B对象中Spring要注入A。这个时候会形成一个闭环因为Spring不知道该先注入哪一个接着会抛出异常。而Spring建议的处理方式是说如果遇到这种情况的话就改用Setter方式注入。
而spring就是通过反射来实现注入的。
理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”。
谁依赖谁:应用程序依赖于IoC容器;
为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
谁注入谁:IoC容器注入应用程序某个对象,应用程序依赖的对象;
注入了什么:注入某个对象所需要的外部资源(包括对象、资源、常量数据)

浙公网安备 33010602011771号