撩课-Java每天5道面试题第20天
131.Spring是什么?
他解决的是业务逻辑层和其他各层的松耦合问题,
因此它将面向接口的编程思想
贯穿整个系统应用。 Spring是一个轻量级的IoC和AOP容器框架。
目的是解决企业应用开发的复杂性,
使用基本的JavaBean来完成
以前只可能由EJB完成的事情,
并提供了更多的企业应用功能,
Spring的用途不仅限于服务器端的开发,
从简单性、
可测试性和松耦合的角度而言,
任何Java应用都可以从Spring中受益。
132.说说Spring 的优点?
.spring属于低侵入式设计,
代码的污染极低; .spring的DI机制降低了
业务对象替换的复杂性; .容器提供了AOP技术,
利用它很容易实现如权限拦截,
运行期监控等功能; .降低了组件之间的耦合性 ,
实现了软件各层之间的解耦; .容器提供单例模式支持; .可以使用容器提供的众多服务,
如事务管理,消息服务等; .容器提供了众多的辅助类,
能加快应用的开发; .spring对于主流的应用框架提供了集成支持,
如hibernate,JPA,Struts等 .独立于各种应用服务器 .Spring的高度开放性,
并不强制应用完全依赖于Spring,
开发者可以自由选择spring的部分或全部。
133.说说你对Spring的IoC与DI的理解
()IOC就是控制反转。
就是对象的创建权反转交给Spring,
由容器控制程序之间的依赖关系,
作用是实现了程序的解耦合,
而非传统实现中,
由程序代码直接操控。
(依赖)控制权由应用代码本身转到了外部容器,
由容器根据配置文件去创建实例
并管理各个实例之间的依赖关系,
控制权的转移,
是所谓反转,
并且由容器动态的将某种依赖关系注入到组件之中。
BeanFactory 是Spring IoC容器的具体实现与核心接口,
提供了一个先进的配置机制,
使得任何类型的对象的配置成为可能,
用来包装和管理各种bean。 .最直观的表达就是,
IOC让对象的创建不用去new了,
可以由spring自动生产,
这里用的就是java的反射机制,
通过反射在运行时动态的去创建、
调用对象。
spring就是根据配置文件
在运行时动态的去创建对象,
并调用对象的方法的。 .Spring的IOC有三种注入方式 :
第一是根据属性注入,也叫set方法注入;
第二种是根据构造方法进行注入;
第三种是根据注解进行注入。 详细的说:
IOC控制反转:
将对象交给容器管理,
你只需要在spring配置文件总配置相应的bean,
以及设置相关的属性,
让spring容器生成类的实例对象以及管理对象。
在spring容器启动的时候,
spring会把你在配置文件中配
置的bean都初始化以及装配好,
然后在你需要调用的时候,
就把它已经初始化好的那些bean
分配给你需要调用这些bean的类。
就是将对象的控制权反转给spring容器管理。 DI机制(Dependency Injection,依赖注入):
可以说是IoC的其中一个内容,
在容器实例化对象的时候
主动的将被调用者(或者说它的依赖对象)
注入给调用对象。
比如对象A需要操作数据库,
以前我们总是要在A中
自己编写代码来获得一个Connection对象,
有了 spring我们就只需要告诉spring,
A中需要一个Connection,
至于这个Connection怎么构造,
何时构造,
A不需要知道。
在系统运行时,
spring会在适当的时候制造一个Connection,
然后像打针一样,注射到A当中,
这样就完成了对各个对象之间关系的控制。
134.解释Spring支持的几种bean的作用域
Spring容器中的bean可以分为5个范围:
.singleton:这种bean范围是默认的,
这种范围确保不管接受到多少个请求,
每个容器中只有一个bean的实例,
单例的模式由bean factory自身来维护。 .prototype:原形范围与单例范围相反,
为每一个bean请求提供一个实例。 .request:在请求bean范围内
会每一个来自客户端的网络请求创建一个实例,
在请求完成以后,
bean会失效并被垃圾回收器回收。 .Session:与请求范围类似,
确保每个session中有一个bean的实例,
在session过期后,
bean会随之失效。 .global-session:
global-session和Portlet应用相关。
当你的应用部署在Portlet容器中工作时,
它包含很多portlet。
如果你想要声明让所有的portlet
共用全局的存储变量的话,
那么这全局变量需要存储在global-session中。
全局作用域与Servlet中的session
作用域效果相同。
135.BeanFactory 接口和 ApplicationContext 接口有什么区别 ?
BeanFactory和ApplicationContext
是Spring的两大核心接口,
而其中ApplicationContext是BeanFactory的子接口。
它们都可以当做Spring的容器,
生成Bean实例的,
并管理容器中的Bean。 .BeanFactory:
是Spring里面最底层的接口,
提供了最简单的容器的功能,
负责读取bean配置文档,
管理bean的加载与实例化,
维护bean之间的依赖关系,
负责bean的生命周期,
但是无法支持spring的aop功能和web应用。 .ApplicationContext接口
作为BeanFactory的派生,
因而具有BeanFactory所有的功能。
而且ApplicationContext还在功能上做了扩展,
以一种更面向框架的方式工作以及对上下文进行分层和实现继承,
相较于BeanFactorty,
ApplicationContext还提供了以下的功能:
①默认初始化所有的Singleton,也可以通过配置取消预初始化。
②继承MessageSource,因此支持国际化。
③资源访问,比如访问URL和文件。
④事件机制。
⑤同时加载多个配置文件。
⑥以声明式方式启动并创建Spring容器。
⑦载入多个(有继承关系)上下文 ,
使得每一个上下文
都专注于一个特定的层次,
比如应用的web层。 BeanFactroy采用的是延迟加载形式
来注入Bean的,
即只有在使用到某个Bean时(调用getBean()),
才对该Bean进行加载实例化,
这样,我们就不能发现一些存在的Spring的配置问题。
如果Bean的某一个属性没有注入,B
eanFacotry加载后,
直至第一次使用调用getBean方法
才会抛出异常。 而ApplicationContext则相反,
它是在容器启动时,
一次性创建了所有的Bean。
这样,在容器启动时,
我们就可以发现Spring中存在的配置错误,
这样有利于检查所依赖属性是否注入。
ApplicationContext启动后
预载入所有的单实例Bean,
通过预载入单实例bean ,
确保当你需要的时候,
你就不用等待,
因为它们已经创建好了。 相对于基本的BeanFactory,
ApplicationContext 唯一的不足是
占用内存空间。
当应用程序配置Bean较多时,
程序启动较慢。 BeanFactory通常以编程的方式被创建,
ApplicationContext还能以声明的方式创建,
如使用ContextLoader。 BeanFactory和ApplicationContext
都支持BeanPostProcessor、
BeanFactoryPostProcessor的使用, 但两者之间的区别是:
BeanFactory需要手动注册,
而ApplicationContext则是自动注册。
撩课-Java每天5道面试题第20天的更多相关文章
- 撩课-Java每天5道面试题第13天
撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...
- 撩课-Java每天5道面试题第15天
撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...
- 撩课-Java每天5道面试题第10天
撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...
- 撩课-Java每天5道面试题第9天
撩课Java+系统架构 视频 点击开始学习 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素内容. 属性标示数据内容及关系 ...
- 撩课-Java每天5道面试题第8天
撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...
- 撩课-Java每天10道面试题第7天
撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...
- 撩课-Java每天10道面试题第4天
撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...
- 撩课-Java每天5道面试题第17天
116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...
- 撩课-Java每天5道面试题第24天
151.springMVC和struts2的区别有哪些? .springmvc的入口是一个servlet即前端控制器(DispatchServlet), 而struts2入口是一个filter过虑器( ...
随机推荐
- 为什么在AI领域网络安全更重要?先睹为快~
AI迎来了改变世界的新机遇,同时也迎来了新的网络安全问题,只要是联网的系统就会有漏洞爆出~ 随着大数据的应用,人工智能逐渐走入千家万户并显示出巨大的市场空间,从机器人客服.自动驾驶汽车到无人机等,全都 ...
- [Flex] 组件Tree系列 —— 作为PopUpButton的弹出菜单
mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:Tree作为PopUpButton ...
- 写给移动开发者的 React Native 指南
本文原创版权归 简书 wingjay 所有,如有转载,请于文章篇头位置显示标注原创作者及出处,以示尊重! 作者:wingjay 出处:http://www.jianshu.com/p/b8894425 ...
- ObjectMapper 动态用法
class DymicObject { private Object o; public DymicObject(Object o) { this.o = o; } p ...
- 直接线性变换解法(DLT)用于标定相机
直接线性变换法是建立像点坐标和相应物点物方空间坐标之间直接的线性关系的算法.特点:不需要内外方位元素:适合于非量测相机:满足中.低精度的测量任务:可以标定单个相机. 1 各坐标系之间的关系推导直接线性 ...
- 详细解读KMP模式匹配算法
转载请注明出处:http://blog.csdn.net/fightlei/article/details/52712461 首先我们需要了解什么是模式匹配? 子串定位运算又称为模式匹配(Patter ...
- hdu 3709 Balanced Number(平衡数)--数位dp
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- 【Three.js】模型抗锯齿处理
1.锯齿消除方法 three.js参考使用官方demo发现模型渲染有锯齿,这种情况在旋转视角时候就非常明显. 抗锯齿的方法,很简单,只需要配置render两个属性即可: renderer = new ...
- CSS外边距合并&块格式上下文
前言问题Margin Collapsing 外边距合并Block Formatting Context 块格式化上下文解决方案参考 前言 之前在前端开发的过程中,都没有遇到外边距合并的问题(其实是因为 ...
- (Android 即时通讯) [悬赏],无论是谁发现一个漏洞奖励人民币1000元!
悬赏,无论是谁发现一个漏洞奖励人民币1000元! 3Q Android 手机版即时通讯系统正式推出,可与电脑版 地灵(http://im.yunxunmi.com) 即时通讯系统互通! 适用于: ...