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天的更多相关文章

  1. 撩课-Java每天5道面试题第13天

    撩课Java+系统架构点击开始学习 96.JDBC操作数据库的步骤 ? .加载数据库驱动 .创建并获取数据库链接 .创建jdbc statement对象 .设置sql语句 .设置sql语句中的参数(使 ...

  2. 撩课-Java每天5道面试题第15天

    撩课Java+系统架构点击开始学习 106.什么是Hibernate的并发机制?怎么去处理并发问题? a.Hibernate的Session对象是非线程安全的, 对于单个请求,单个会话, 单个的工作单 ...

  3. 撩课-Java每天5道面试题第10天

    撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...

  4. 撩课-Java每天5道面试题第9天

    撩课Java+系统架构 视频 点击开始学习 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素内容. 属性标示数据内容及关系 ...

  5. 撩课-Java每天5道面试题第8天

    撩课Java+系统架构 视频 点击开始学习 71.jsp有哪些内置对象?作用分别是什么? Page, pageContext, request, response, session, applicat ...

  6. 撩课-Java每天10道面试题第7天

    撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...

  7. 撩课-Java每天10道面试题第4天

    撩课Java+系统架构 视频 点击开始学习 31.静态变量和实例变量的区别? 静态变量也叫类变量, 这种变量前加了static修饰符. 可以直接用类名调用, 也可以用对象调用, 而且所有对象的同一个类 ...

  8. 撩课-Java每天5道面试题第17天

    116.说下Struts的设计模式 MVC模式: web应用程序启动时 就会加载并初始化ActionServler. 用户提交表单时, 一个配置好的ActionForm对象被创建, 并被填入表单相应的 ...

  9. 撩课-Java每天5道面试题第24天

    151.springMVC和struts2的区别有哪些? .springmvc的入口是一个servlet即前端控制器(DispatchServlet), 而struts2入口是一个filter过虑器( ...

随机推荐

  1. 深入了解java虚拟机(JVM) 第七章 内存分配策略

    理解了jvm内存分配策略不仅是程序性能调优的重要知识,还能够给养成自己一种良好的代码思路,一个程序的代码差异往往都是在这里体现出来的. 一.对象优先分配到Eden区域   一般来说,新创建的对象都会直 ...

  2. jquery 通过attr获取属性只有一个值的解决

    var a = []; $($('select.list[data-target="' + target + '"]').find("option:selected&qu ...

  3. [ActionScript 3.0] 模拟win7彩色气泡屏保效果

    主文件: package { import com.views.BubbleView; import com.views.ColorfulBubble; import flash.display.Sp ...

  4. mxonline实战6 , 忘记用户密码时进行重置

        对应github地址:密码重置   原理:  1. 一个需要输入用户邮箱和注册码的密码忘记页面 2. 点击提交后,用户邮箱收到一个邮件,包含重置密码的链接 3. 点击链接进入密码重置页面   ...

  5. 数学规划求解器lp_solve超详细教程

    前言 最近小编学了运筹学中的单纯形法.于是,很快便按奈不住跳动的心.这不得不让我拿起纸和笔思考着,一个至关重要的问题:如何用单纯形法装一个完备的13? 恰巧,在我坐在图书馆陷入沉思的时候,一位漂亮的小 ...

  6. css元素垂直居中的8中方法

    1. 通过vertical-align:middle实现CSS垂直居中 通过vertical-align:middle实现CSS垂直居中是最常使用的方法,但是有一点需要格外注意,vertical生效的 ...

  7. PTA 这是二叉搜索树吗?

    https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 #include<iostream&g ...

  8. (转载)Android xml资源文件中@、@android:type、@*、?、@+引用写法含义以及区别

    原帖地址:http://blog.csdn.net/zfrong/article/details/7332545 Android xml资源文件中@.@android:type.@*.?.@+引用写法 ...

  9. Mac 10.12安装Atom文本增强编辑工具

    下载: https://atom.io/

  10. LINQ入门教程之各种标准查询操作符(二)

    续上篇LINQ入门教程之各种标准查询操作符(一) LINQ入门教程之各种标准查询操作符(二) 7.  聚合操作符 8.  集合操作符 9.  生成操作符 #region 生成操作符 即从现有序列的值中 ...