首页 > 程序开发 > 软件开发 > 其他 >

spring的Ioc做到简化创建对象的原理

2018-04-11

spring的Ioc做到简化创建对象的原理。

当我们只用servlet开发web项目时,启动servlet容器后,通过url在web.xml中找到要应执行的controller,如果要做到对象单例话,就需要写每个dao、service类的单例创建,需要这些对象的话去单例类中取,写一套业务逻辑比较复杂的项目光创建对象的单利类就需要很多时间,如果要用多例的话,就更麻烦了,每次都要创建对象,还要保证在对象调用之前需要完成实例化,在具体的开发中,需要大量精力去维护这种关系,并且很容易出现空指针异常。

引入了spring框架之后,我们就可以把设计好的对象的创建权交给容器,我们在用的时候,只需要@Autowired注解就可以得到对象,不会出现空指针异常,然而spring容器是怎么做到的?

spring容器启动后,会去检测项目中的@Controller、@Autowired、@Scope,当找到@Controller A之后,去查看该类下边的@Autowired注解的类B,之后再去查看B下边@Autowired的类C,之后容器为个各类创建对象之前去查看类的@Scope注解符,如果找不到或者写的是@Scope("Singletion"),则创建单例对象,是@Scope("Prototype")的话,创建对象池,同时保证C对象的创建早于B,可理解为spring容器为我们做的是通过最佳的创建对象顺序为我们实例化了对象,供我们调用。可以比喻成一个加工厂要交工很多不同种类的零件,spring是考虑了各种原因,按最快速的方案制造零件,我们用servlet的话相对就是A说 我现在要零件A,另一个人说我要B,这时线程就需要判断优先级啥的,造成线程相互等待等等。

相关文章
最新文章
热点推荐