收藏 分享(赏)

Spring,Hibernate工作原理以及MVC结构的简介.doc

上传人:hwpkd79526 文档编号:6227582 上传时间:2019-04-03 格式:DOC 页数:15 大小:76.50KB
下载 相关 举报
Spring,Hibernate工作原理以及MVC结构的简介.doc_第1页
第1页 / 共15页
Spring,Hibernate工作原理以及MVC结构的简介.doc_第2页
第2页 / 共15页
Spring,Hibernate工作原理以及MVC结构的简介.doc_第3页
第3页 / 共15页
Spring,Hibernate工作原理以及MVC结构的简介.doc_第4页
第4页 / 共15页
Spring,Hibernate工作原理以及MVC结构的简介.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、一、spring 工作原理:1.spring mvc请所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个 HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标 Controller 4.Controller进行业务逻辑处理后,会返回一个 ModelAndView 5.Dispathcher查询一个或多个 ViewResolver视图解析器,找到 ModelAndView对象指定的视图对象 6.视图对象负责渲染

2、返回给客户端。 二、为什么要用 spring:AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用 其协作对象构造的。因此是由容器管理协作对象(collab

3、orator)。 Spring即使一个 AOP框架,也是一 IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。 三、请你谈谈 SSH整合:SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)Struts:Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。在 MVC框架中,Struts 属于 VC层次,负责界面表现,负责 MVC关系的分发。(View:沿用 JSP,HTTP,Form,Tag,Reso

4、urse ;Controller:ActionServlet,struts-config.xml,Action)Hibernate:Hibernate是一个持久层框架,它只负责与关系数据库的操作。Spring:Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。四、介绍一下 Spring的事务管理: 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。开发中为了避免这种情况一般都会进行事务管理。Spring 中也有自己的事务

5、管理机制,一般是使用 TransactionMananger进行管理,可以通过 Spring的注入来完成此功能。spring提供了几个关于事务处理的类:TransactionDefinition /事务属性定义TranscationStatus /代表了当前的事务,可以提交,回滚。PlatformTransactionManager 这个是 spring提供的用于管理事务的基础接口,其下有一个实现的抽象类 AbstractPlatformTransactionManager,我们 使用的事务管理类例如 DataSourceTransactionManager等都是这个类的子类。一般事务定义步骤

6、:TransactionDefinition td = new TransactionDefinition();TransactionStatus ts = transactionManager.getTransaction(td);try /do sthtransactionMmit(ts);catch(Exception e)transactionManager.rollback(ts);spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。编程式主要使用 transactionTemplate。省略了

7、部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.void add()transactionTemplate.execute( new TransactionCallback()pulic Object doInTransaction(TransactionStatus ts) /do sth声明式:使用 TransactionProxyFactoryBean:PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly 围绕 Poxy的动态代理 能够自动的提交和回滚事务org.springframew

8、ork.transaction.interceptor.TransactionProxyFactoryBeanPROPAGATION_REQUIRED支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NOT_SUPPORTED以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。PRO

9、PAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常。PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与 PROPAGATION_REQUIRED类似的操作。五、Spring 里面如何配置数据库驱动?使用”org.springframework.jdbc.datasource.DriverManagerDataSource”数据源来配置数据库驱动。示例如下:org.hsqldb.jdbcDriverjdbc:hsqldb:db/appfusesa六、Spring 里面 applicationContext.xml文件能不能

10、改成其他文件名?ContextLoaderListener是一个 ServletContextListener, 它在你的 web应用启动的时候初始化。缺省情况下, 它会在 WEB-INF/applicationContext.xml文件找 Spring的配置。 你可以通过定义一个元素名字为”contextConfigLocation”来改变 Spring配置文件的 位置。示例如下:org.springframework.web.context.ContextLoaderListenercontextConfigLocation/WEB-INF/xyz.xml七、如何在 web应用里面配置 s

11、pring?在 web.xml中加入如下同容,在启动 web服务器时加载/WEB-INF/applicationContext.xml中的内容。contextorg.springframework.web.context.ContextLoaderServlet1通过如下类得到 ApplicationContext实例WebApplicationContextUtils.getWebApplicationContext八、Spring 里面如何定义 hibernate mapping?添加 hibernate mapping 文件到 web/WEB-INF目录下的applicationCont

12、ext.xml文件里面。示例如下:org/appfuse/model/User.hbm.xml九、解释一下 Dependency injection(DI,依赖注入)和 IOC(Inversion of control,控制反转)?依赖注入 DI是一个程序设计模式和架构模型, 一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个 IOC的特殊实现,依赖注入是指一个对象应用另外一个对象来提供一个特殊的能力,例如:把一个 数据库连接已参数的形式传到一个对象的结构方法里面而不是在那个对象内部自行创建一个连接。控制反转和依赖注入的基本思想就是把类的依赖从类内部转化到外 部以减少依赖应用控制反转,对

13、象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。十、spring 中的 BeanFactory与 ApplicationContext的作用有哪些?1. BeanFactory负责读取 bean配置文档,管理 bean的加载,实例化,维护bean之间的依赖关系,负责 bean的声明周期。2. ApplicationContext除了提供上述 BeanFactory所能提供的功能之外,还提供了更完整的框架功能:a. 国际化支持b. 资源访问:Resou

14、rce rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”c. 事件传递:通过实现 ApplicationContextAware接口3. 常用的获取 ApplicationContext的方法:FileSystemXmlApplicationContext:从文件系统或者 url指定的 xml配置文件创建,参数为配置文件名或文件名数组ClassPathXmlApplicationContext:从 classpath的 xml配置文件创建,可以从 jar包中读取配置文件WebApp

15、licationContextUtils:从 web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者 servlet来实现org.springframework.web.context.ContextLoaderListenercontextorg.springframework.web.context.ContextLoaderServlet1这两种方式都默认配置文件为 web-inf/applicationContext.xml,也可使用context-param指定配置文件contextConfigLocation/WEB-INF/myApplicationCo

16、ntext.xml十一、如何在 web环境中配置 applicationContext.xml文件?org.springframework.web.context.ContextLoaderListener或:contextorg.springframework.web.context.ContextLoaderServlet1通过如下方法取出 applicationContext实例:ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);十二、如何配置

17、 spring+struts?在 struts-config.xml加入一个插件,通过它加载 applicationContext.xml在 struts-config.xml修改 action-mapping标记,具体 action交给了DelegateActionProxy通过 DelegateActionProxy进入一 spring的环境。在 spring的 applicationContext.xml加入十三、spring+hibernate 的配置文件中的主要类有那些?如何配置?dataSourcesessionFactory:hibernate.cfg.xmltransactio

18、nManageruserDao (extends HibernateDaoSupport) sessionFactoryfacadeproxysessionFactorytransactionManagerfacade在 myeclipse中先加入 spring环境再加入 hibernate环境。如果 spring与 hibernate结合在一起可以不需要 hibernate.cfg.xml文件是否正确十四、如何在 spring中实现国际化?在 applicationContext.xml加载一个 beanmessage在 src目录下建多个 properties文件对于非英文的要用 nati

19、ve2ascii -encoding gb2312 源 目转化文件相关内容其命名格式是 message_语言_国家。页面中的中显示提示信息,键名取键值。当给定国家,系统会自动加载对应的国家的 properties信息。通过 applictionContext.getMessage(“键名”,”参数”,”区域”)取出相关的信息。十五、spring 中的核心类有那些,各有什么作用?BeanFactory:产生一个新的实例,可以实现单例模式BeanWrapper:提供统一的 get及 set方法ApplicationContext:提供框架的实现,包括 BeanFactory的所有功能十六、什么是

20、aop,aop 的作用是什么?面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足除了类(classes)以外,AOP 提供了切面。切面对关注点进行模块化,例如横切多个类型和对象的事务管理Spring的一个关键的组件就是 AOP框架,可以自由选择是否使用 AOP提供声明式企业服务,特别是为了替代 EJB声明式服务。最重要的服务是声明性事务管理,这个服务建立在 Spring的抽象事物管理之上允许用户实现自定义切面,用 AOP来完善 OOP的使用可以把 Spring AOP看作是对 Spring的一种增强十七、使用 Spring有什么好处?Sprin

21、g 能有效地组织你的中间层对象,无论你是否选择使用了 EJB。如果你仅仅使用了 Struts或其他的包含了 J2EE特有 APIs的 framework,你会发现Spring关注了遗留下的问题,。Spring 能消除在许多工程上对 Singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。Spring 能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种 一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读 Javadoc乃至源编码吗?有了Spring,你可 很简单地看到类的 JavaB

22、ean属性。倒置控制的使用(在下面讨论)帮助完成这种简化。Spring 能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。Spring 被设计为让使用它创建的应用尽可能少的依赖于他的 APIs。在Spring应用中的大多数业务对象没有依赖于 Spring。使用 Spring构建的应用程序易于单元测试。Spring 能使 EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用 POJOs或 local EJBs来实现业务接口,却不会影响调用代码。Spring 帮助你解决许多问题而无需使用 EJB。Spring 能提供一种 EJB的替换物,它们适于许多 web应用。例如,Sp

23、ring 能使用 AOP提供声明性事务而不通过使用 EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要 JTA实现。Spring 为数据存取提供了一致的框架,不论是使用 JDBC或 O/R mapping产品(如 Hibernate)。Spring确实使你能通过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。总结起来,Spring 有如下优点:低侵入式设计,代码污染极低 独立于各种应用服务器,可以真正实现 Write Once,Run Anywhere的承诺Spring 的 DI机制降低了业务对象替换的复杂性Spring 并不完全依赖于 Spring,开发者可自由选用 Spr

24、ing框架的部分或全部十八、什么是 Spring, 它有什么特点?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。轻量从大小与开销两方面而言 Spring 都是轻量的。完整的 Spring框架可以在一个大小只有 1MB多的 JAR文件里发布。并 且 Spring所需的处理开销也是微不足道的。此外,Spring 是非侵入式的:典型地,Spring 应用中的对象不依赖于 Spring的特定类。控制反转Spring 通过一种称作控制 反转(IoC)的技术促进了松耦 合。当应用了 IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象

25、。你可以认为 IoC与 JNDI相反不 是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。面向切面Spring 提供了面向切面编程的丰富支 持,允许通过分离应用的 业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的完成业务逻辑仅此而已。它们 并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。容器Spring 包含并管理应用对象的配置和生命周期,在这个意义上它 是 一种容器,你可以配置你的每个 bean如何被创建基于一个可配置原型(prototype),你的 bean可以创建一个单独的实例或者每

26、次需要时都生 成一个新的实例以及它们是如何相互关联的。然而,Spring 不应该被混同于传统的重量级的 EJB容器,它们经常是庞大与笨重的,难以使用。框架Spring 可以将简单的组件配置、组合成为复杂的应用。在 Spring中,应用对象被声明式地组合,典型地是在一个 XML文件里。Spring 也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。十九、请介绍一下 Spring框架中 Bean的生命周期一、Bean 的定义Spring通常通过配置文件定义 Bean。如:HelloWorld这个配置文件就定义了一个标识为 HelloWorld 的 Bean。在一个配置

27、文档中可以定义多个 Bean。二、Bean 的初始化有两种方式初始化 Bean。1、在配置文档中通过指定 init-method 属性来完成在 Bean的类中实现一个初始化 Bean属性的方法,如 init(),如:public class HelloWorldpublic String msg=null;public Date date=null;public void init() msg=”HelloWorld”;date=new Date();然后,在配置文件中设置 init-mothod属性:2、实现 org.springframwork.beans.factory.Initiali

28、zingBean 接口Bean实现 InitializingBean接口,并且增加 afterPropertiesSet() 方法:public class HelloWorld implement InitializingBean public String msg=null;public Date date=null;public void afterPropertiesSet() msg=”向全世界问好!”;date=new Date();那么,当这个 Bean的所有属性被 Spring的 BeanFactory设置完后,会自动调用 afterPropertiesSet()方法对 Bea

29、n进行初始化,于是,配置文件就不用指定 init-method 属性了。三、Bean 的调用有三种方式可以得到 Bean并进行调用:1、使用 BeanWrapperHelloWorld hw=new HelloWorld();BeanWrapper bw=new BeanWrapperImpl(hw);bw.setPropertyvalue(”msg”,”HelloWorld”);system.out.println(bw.getPropertyCalue(”msg”);2、使用 BeanFactoryInputStream is=new FileInputStream(”config.xml

30、”);XmlBeanFactory factory=new XmlBeanFactory(is);HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”);system.out.println(hw.getMsg();3、使用 ApplicationConttextApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”);HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”);System.out.p

31、rintln(hw.getMsg();四、Bean 的销毁1、使用配置文件中的 destory-method 属性与初始化属性 init-methods 类似,在 Bean的类中实现一个撤销 Bean的方法,然后在配置文件中通过 destory-method 指定,那么当 bean销毁时,Spring 将自动调用指定的销毁方法。2、实现 org.springframwork.bean.factory.DisposebleBean 接口如果实现了 DisposebleBean接口,那么 Spring将自动调用 bean中的 Destory方法进行销毁,所以,Bean 中必须提供 Destory方

32、法。二十、AOP 里面重要的几个名词概念解释: 切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是 J2EE应用中一个关于横切关注点的很好的例子。 在 Spring AOP中,切面可以使用通用类(基于模式的风格)或者在普通类中以 Aspect 注解(AspectJ 风格)来实现。 连接点(Joinpoint): 在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在 Spring AOP中,一个连接点 总是 代表一个方法的执行。 通过声明一个org.aspectj.lang.JoinPoint 类型的参数可以使通知(Advice)的主体部分

33、获得连接点信息。 通知(Advice): 在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。许多 AOP框架,包括 Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。 切入点(Pointcut): 匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是 AOP的核心:Spring 缺省使用 AspectJ切入点语法。 引入(Int

34、roduction): (也被称为内部类型声明(inter-type declaration)。声明额外的方法或者某个类型的字段。 Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。 例如,你可以使用一个引入来使 bean实现 IsModified 接口,以便简化缓存机制。 目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(advised) 对象。 既然 Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。 AOP代理(AOP Proxy): AOP

35、框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。 在Spring中,AOP 代理可以是 JDK动态代理或者 CGLIB代理。 注意:Spring 2.0最新引入的基于模式(schema-based)风格和AspectJ注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。 织入(Weaving): 把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。 这些可以在编译时(例如使用 AspectJ编译器),类加载时和运行时完成。 Spring和其他纯 Java AOP框架一样,在运行时完成织

36、入。 通知的类型: 前置通知(Before advice): 在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)。 返回后通知(After returning advice): 在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。 抛出异常后通知(After throwing advice): 在方法抛出异常退出时执行的通知。 后通知(After (finally) advice): 当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。 环绕通知(Around Advice): 包围一

37、个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。 环绕通知是最常用的一种通知类型。大部分基于拦截的 AOP框架,例如Nanning和 JBoss4,都只提供环绕通知。切入点(pointcut)和连接点 (join point)匹配的概念是 AOP的关键,这使得 AOP不同于其它仅仅提供拦截功能的旧技术。 切入点使得定位通知(advice)可独立于 OO层次。 例如,一个提供声明式事务管理的 around通知可以被应用到一组横跨多个对象中的方法上

38、(例如服务层的所有业务操作)。 一、Hibernate 工作原理:1. 读取并解析配置文件 2. 读取并解析映射信息,创建 SessionFactory 3. 打开 Sesssion 4. 创建事务 Transation 5. 持久化操作 6. 提交事务 7. 关闭 Session 8. 关闭 SesstionFactory 二、Hibernate 有什么好处: 对 JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 Hibernate是一个基于 JDBC的主流持久化框架,是一个优秀的 ORM实现。他很大程度的简化 DAO层的编码工作 hibernate使用 Java反射

39、机制,而不是字节码增强程序来实现透明性。 hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 三、Hibernate 是如何延迟加载的: Hibernate2 延迟加载实现: a)实体对象 b) 集合(Collection) Hibernate3 提供了属性的延迟加载功能 四、Hibernate 的查询方式:Sql、Criteria,object comptosition Hql: 属性查询 参数查询、命名参数查询 关联查询 分页查询 统计函数 五、说下 Hibernate的缓存机制: 使用双向一对多关联,不使用单向一对多 灵活使用单向一对多关联 不用一对一,用多对一取代 配置对象缓存,不使用集合缓存 一对多集合使用 Bag,多对多集合使用 Set 继承类使用显式多态 表字段要少,表关联不要怕多,有二级缓存撑腰 内部缓存存在 Hibernate中又叫一级缓存,属于应用事物级缓存 二级缓存: 六、如何优化 Hibernate:a)应用及缓存 b)分布式缓存 条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据 c) 第三方缓存的实现

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 开发文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报