spring IOC是什么及有哪些设计模式


这篇文章主要介绍“spring IOC是什么及有哪些设计模式”,在日常操作中,相信很多人在spring IOC是什么及有哪些设计模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”spring IOC是什么及有哪些设计模式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
控制反转(inversion of control)和依赖注入(dependency injection)其实是同一个概念。当某个方法需要另外一个对象协助的时候,传统的方法就是有调用者来通过new创建被调用者的实例,但是在spring中创建被调用者的工作不再有调用者来完成,称之为控制反转(ioc)。创建被调用者的工作由spring来完成,然后注入调用者,成为依赖注入。
这样做得目的当然是为了解耦,减低类之间得耦合度,其设计思想就是设计模式中得工厂模式。在spring容器启动得时候,spring会将配置项中配置好得bean都初始化。需要调用得时候,把初始化得bean分配给调用的类,而不需要手动创建一个对象实例。
对于springIOC来说由两处地方最重要,一个是创建bean容器,一个是初始化bean。
在Sping IoC的体系结构中BeanFactory作为最顶层的一个接口类,它定义了IoC容器的基本功能规范。并且为了区分在Spring内部在操作过程中对象的传递和转化过程中,对对象的数据访问做限制,使用了多层接口ListableBeanFactory接口表示这些Bean是可列表的. HierarchicalBeanFactory表示的是这些Bean是有继承关系的,也就是每个Bean有可能有父Bean。AutowireCapableBeanFactory接口定义Bean的自动装配规则。
默认实现类是DefaultListableBeanFactory,他实现了所有的接口.
Spring IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。IOC容器负责创建对象,将对象连接在一起,配置这些对象,并从创建中处理这些对象的整个生命周期(多例的对象spring不会管理生命周期),直到它们被完全销毁。
Spring使用工厂模式可以通过BeanFactory或者ApplicationContext创建bean对象。
BeanFactory:延迟注入(spring默认为懒加载,即使用到某个bean的时候才会注入,可以通过@Lazy(false)设置为非懒加载)。相比于ApplicationContext来说会占用更少的内存。
ApplicationContext:容器启动的时候,不管有没有用到,一次性创建所有的bean,ApplicationContext继承了BeanFactory,除了BeanFactory的功能外还有额外的更多功能,所以一般使用的更多。
Spring中bean的默认作用域就是singleton(单例)的。Spring中实现单例的方式有两种:
除了singleton作用域,Spring中bean还有下面几种作用域:
prototype :每次请求都会创建一个新的bean实例。
request :每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
session :每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。
global-session: 全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。Portlet是能够生成语义代码(例如:HTML)片段的小型Java Web插件。它们基于portlet容器,可以像servlet一样处理HTTP请求。但是,与servlet不同,每个portlet都有不同的会话。
在spring中通过ApplicationContext来获取Resource的实例,包括urlResource,classPathResource,fileSystenResource等不同的资源类型,spring针对不同的资源类型采取不同的访问策略。ApplicationContext将会负责选择Resource的实现类,也就是确定具体的资源访问策略,从而将应用程序和具体的资源访问策略分离开来。
  装饰者模式可以动态地给对象添加一些额外的属性或行为。相比于使用继承,装饰者模式更加灵活。简单点儿说就是当我们需要修改原有的功能,但我们又不愿直接去修改原有的代码时,设计一个Decorator套在原有代码外面。其实在JDK中就有很多地方用到了装饰者模式,比如InputStream家族,InputStream类下有FileInputStream(读取文件)、Bu免费云主机域名fferedInputStream(增加缓存,使读取文件速度大大提升)等子类都在不修改InputStream代码的情况下扩展了它的功能。
Spring中类中带有Wrapper的都是包装类。到此,关于“spring IOC是什么及有哪些设计模式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: 怎么去打造微信小程序的爆款

这篇文章将为大家详细讲解有关怎么去打造微信小程序的爆款,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 其实小程序是一个工具,本身并无法给企业、商户进行引流,只有做好小程序的运营才能慢慢积累用户量,从而产生效益。有的软件开发公…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/13 16:56
Next 08/13 16:57

相关推荐