加入我的QQ群(701974765) 获取更多好用又好玩的软件,还有不定期发放的福利呦(~ ̄▽ ̄)~

Spring的优点/对Spring的理解

Spring的AOP编程

Spring的IOC

Spring的生命周期

Spring常见注解

@Repository(用于标注数据访问组件,即DAO组件)、@Autowired(默认按类型装配)、@Resource(默认按名称装配)、@Controller、@Service、@RequestMapping、@PathVariable

Spring中Bean的生命周期和作用域

(1) bean定义:在配置文件里面用<bean></bean>来进行定义。

(2) bean初始化:A.在配置文件中通过指定init-method属性来完成     B.实现org.springframwork.beans.factory.InitializingBean接口

(3) bean调用:有三种方式可以得到bean实例,并进行调用

(4) bean销毁:A.使用配置文件指定的destroy-method属性     B.实现org.springframwork.bean.factory.DisposeableBean接口

Bean的作用域:

singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

prototype:每次调用Bean时,容器都返回一个新的实例(即每次调用getBean时,都相当于执行new XxxBean()  )。

request:在请求bean范围内会每个Http请求创建一个新的实例,在请求完成以后,bean会失效并被垃圾回收器回收,该作用域仅适用于WebApplicationContext环境。

Session:与请求范围类似,每个session中有一个bean的实例,在session过期后,bean会随之失效,仅适用于WebApplicationContext环境。

global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中(该作用域仅适用于WebApplicationContext环境)。

Spring的事务管理

事务的的相关概念

事务就是对一系列的数据库操作进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作,这样可以防止出现脏数据。事务具备ACID四种特性,即 Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)。

事务的隔离级别(Mysql的默认隔离级别是Repeatable read,Oracle默认的事务隔离级别是Read committed):

(1)read uncommited:是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。

(2)read commited:保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。

(3)repeatable read:这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻读。

(4)serializable:这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。避免了脏读,不可重复读和幻读

Spring的事务管理

Spring的事务一般是使用TransactionMananger进行管理,Spring提供了几个关于事务处理的类:

TransactionDefinition  //事务属性定义

TranscationStatus  //代表了当前的事务,可以提交,回滚。

PlatformTransactionManager //这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类 AbstractPlatformTransactionManager,我们使用的事务管理类例如 DataSourceTransactionManager等都是这个类的子类。

Spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活 (主流)。

Spring中自动装配的方式有哪些

Spring中的核心类

BeanFactory、ApplicationContext(Spring的IOC容器):

ApplicationContext 接口继承BeanFactory接口,Spring核心工厂是BeanFactory ,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean, ApplicationContext是会在加载配置文件时初始化Bean。

ApplicationContext是对BeanFactory扩展,它可以进行国际化处理、事件传递和bean自动装配以及各种不同应用层的Context实现 。

开发中基本都在使用ApplicationContext, web项目使用WebApplicationContext ,很少用到BeanFactory,详细解释见:http://wiki.jikexueyuan.com/project/spring/ioc-containers.html

Spring定时任务

SpringMVC的流程

1.用户发送请求至前端控制器DispatcherServlet

2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4.DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5.执行处理器(Controller,也叫后端控制器)。

6.Controller执行完成返回ModelAndView

7.HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9.ViewReslover解析后返回具体View

10.DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

11.DispatcherServlet响应用户

Springmvc的优点

SpringMVC的请求转发和重定向

请求转发:在返回的视图名时使用类似"return "forward:/test1"的形式,请求转发时会携带request中的参数,并且请求的url不变,转发的处理过程中请求不会经过客户端,速度较快

重定向:在返回的视图名时使用类似"return "redirect:/test2"的形式,请求转发时不会携带request中的参数,并且重定向后的url发生变化,重定向的处理过程中会经过客户端

另:可以通过redirect: URL防止重复提交表单; 如果希望Request的attribute被传递,可以使用RedirectAttributes类; 使用重定向时可以重定向到外部网站。

Spring中用到的设计模式

简单工厂:简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类,Spring中的BeanFactory就是简单工厂模式的体现。

工厂方法:通常由应用程序直接使用new创建新的对象,应用程序将对象的创建及初始化职责交给工厂对象。一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean。

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。Spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory,但没有从构造器级别去控制单例,这是因为spring管理的是是任意的java对象。Spring下默认的bean均为singleton,可以通过singleton=“true|false” 或者 scope=“?”来修改默认值

适配器:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

包装器:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。

代理模式:为其他对象提供一种代理以控制对这个对象的访问。  从结构上来看和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。

观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。spring中Observer模式常用的地方是listener的实现。如ApplicationListener。

策略模式:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。Spring中在实例化对象的时候用到Strategy模式

模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,Template Method模式一般是需要继承的。

初级Java面试题 – SSM框架篇的更多相关文章

  1. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  2. 2017年java面试题【集合篇】

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. 这里有10个经典的Java面试题,也为大 ...

  3. 初级Java面试题 - JavaSE篇

    p{font-size:18px;} li{font-size:18px;} 加入我的QQ群(701974765) 获取更多好用又好玩的软件,还有不定期发放的福利呦(- ̄▽ ̄)- Java基本数据类型 ...

  4. Java面试题(设计模式篇+Spring/Spring MVC篇)

    设计模式 88.说一下你熟悉的设计模式? 自行熟悉. 89.简单工厂和抽象工厂有什么区别? 简单理解简单工厂:对 一个对象的创建进行封装.抽象工厂:对 一组对象的创建进行封装. 比如生产 陶瓷马 和  ...

  5. [ Java面试题 ]持久层篇

    1.什么是ORM?  对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术: 简单的说,ORM是通过使用描 ...

  6. Java面试题之高级篇研读

    1.List和Set比较,各自的子类比较 对比一:ArrayList与LinkedList比较 1.ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较 ...

  7. 70道阿里百度高频Java面试题(框架+JVM+多线程+算法+数据库)

    基础与框架 1.String类能被继承吗,为什么 2.String,Stringbuffer,StringBuilder的区别? 3.ArrayList和LinkedList有什么区别 4.类的实例化 ...

  8. Java面试题(Hibernate篇)

    Hibernate 113.为什么要使用 hibernate? 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. Hibernate是一个基于JDBC的主流持久化框架,是一个 ...

  9. Java面试题(多线程篇)

    多线程 35.并行和并发有什么区别? 1.并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 2.并行是在不同实体上的多个事件,并发是在同一实体上的多个事件. 3.在 ...

随机推荐

  1. html增加锚点定位

    第一种方法,也是最简单的方法是锚点用<a>标签,在href属性中写入DIV的id.如下: <!DOCTYPE html><html><head>< ...

  2. action(三)

    CCSize boxSize = CCSizeMake(100.0f, 100.0f); CCLayerColor *box = CCLayerColor::create(ccc4(, , , )); ...

  3. [转] C#与Java的比较

    [转] C#与Java的比较 转自:C#与Java的比较 2015-06-26 目录 一.C#.C++和Java二.语言规范的比较  2.1.简单数据类型  2.2.常量  2.3.公用类的入口点  ...

  4. Django QuerySet 方法梳理 。model外键 多对多的保存

    引用:https://feifeiyum.github.io/2017/03/28/python-django-queryset/ 说明 Models 层是 Django 框架中最强大的部分之一, 大 ...

  5. js eval深入

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  6. oracle 存储过程学习感悟

    1.跟大白话差不多 2.if...then.... else ....写的比较多 3.调用存储过程命令:execute procedure_name 4.调用存储函数命令:select '0' str ...

  7. 网页打开新窗口——Window.open()详解

    转载自:http://blog.csdn.net/business122/article/details/8281142 Window.Open详解 一.window.open()支持环境:JavaS ...

  8. linux回调函数的使用

    #include<stdio.h> #include<pthread.h> #include<unistd.h> pthread_mutex_t mutex; pt ...

  9. jquery filter和not

    jQuery filter() 方法 filter() 方法允许您规定一个标准.不匹配这个标准的元素会被从集合中删除,匹配的元素会被返回. 下面的例子返回带有类名 "intro" ...

  10. 脚本中出现“+ $'\r' : command not found

    脚本中的部分应该是从doc直接拷过来的,造成回车符“\r”出现问题 通过将脚本内容在linux下拷贝一次,就解决了这个问题!