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. [CISCO] 思科交换机基本配置

    思科交换机基本配置 交换机是局域网中最重要的设备,交换机是基于 MAC 来进行工作的.和路由器类似,交换 机也有 IOS,IOS 的基本使用方法是一样的.本章将简单介绍交换机的一些基本配置,以及交换 ...

  2. day05 --class --home

    # -*- coding: utf-8 -*-# @Time : 2018/12/25 14:24# @Author : Endless-cloud# @Site : # @File : day05 ...

  3. SaltStack Pillar 详解

    简介 grains用于存储静态不易变更的数据,而pillar一般用于存储动态, 敏感的数据,通过minion和master设置或获取grains信息,而pillar信息只能在master端配置,在到m ...

  4. spring与shiro配置详解

    1.加入shiro相关依赖的jar包 pom.xml部分内容如下: <dependency> <groupId>org.apache.shiro</groupId> ...

  5. 根据域名获取ip地址gethostbyname

    #include <sys/socket.h> #include <stdio.h> #include <netdb.h> int main(int argc, c ...

  6. Android屏幕尺寸单位转换

    最近在看Android群英传这本书,书中有一节涉及到了,屏幕尺寸与单位.觉得以后可能会用到,做个笔记. PPI(pixels per inch) ,又称为DPI,它是由对角线的像素点数除以屏幕的大小得 ...

  7. 利用CompletableFuture优化程序的执行效率

    一.线程池的Future模式 在了解java8的CompletableFuture之前,先通过Future来解决一个问题,看个例子: 假设现在有一个网站,首页有顶部Banner位.左边栏.右边栏.用户 ...

  8. 自定义ASP.NET Core日志中间件

    这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息. 1.首先创建一个Web应用项目,我选择的是MVC模板: 2.使用NuGet添加Microsoft.Extens ...

  9. dubbo学习笔记:快速搭建

    搭建一个简单的dubbo服务 参考地址: dubbo官网:http://dubbo.apache.org/zh-cn/docs/user/references/registry/zookeeper.h ...

  10. C#常用字符串总结

    字符串基础<一> static void Main(string[] args) { string str1 = "I Love You"; string str2 = ...