对Spring框架的理解?

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架;也就是解耦和,在不改变依赖的类的情况下,修改依赖关系。

IOC:控制反转也就是依赖注入。利用了工厂模式将对象交给容器管理,只需要在spring配置文件中配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。

首先,需要说明的一点,AOP只是Spring的特性,它就像OOP一样是一种编程思想,并不是某一种技术,AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

简单点解释,比方说你想在你的biz层所有类中都加上一个打印‘你好,AOP’的功能这你经可以用aop思想来做,你先写个类写个方法,方法经实现打印‘你好,AOP’让后你Ioc这个类 ref=“biz.*”让每个类都注入。

对SpringMVC框架的理解?

SpringMVC就是Spring框架的一个模块,他可以和Spring框架进行无缝整合,它是一个基于mvc设计思想的前端web框架,主要作用就是对前端请求进行处理。它的前端控制器是一个servlet,它的请求拦截是基于方法级别的,它的执行流程是

SpringMVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成

1.客户端请求提交到DispatcherServlet

2.由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller

3.DispatcherServlet将请求提交到Controller

4.Controller调用业务逻辑处理后,返回ModelAndView

5.DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

6.视图负责将结果显示到客户端

Springmvc概括来说就是request请求到中央控制器à传到映射处理器à转发到指定controllerà获取数据和view,组成ModelAndView组件à通过ViewResolver返回到特定的前端页面,Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

对Struts2框架的理解?

它是一个基于mvc设计思想的前端web层框架,主要作用就是对前端请求进行处理。他的核心是拦截器,但是它的前端控制器是一个过滤器,它的请求拦截是基于类级别,OGNL也提供了在Struts2里访问各种作用域中的数据的简单方式,大大简化了获取数据的代码,Struts2的执行流程是:

A. 页面请求传递到后台, 首先进入Struts2 的核心StrutsPrepareAndExecutedFilter .

B. 请求进入到struts2 之后, 会根据请求的路径到 struts.xml 文件中根据 package的 namespace 属性 与 action 的 name 属性配置到请求处理的Action 类.

C. 匹配到对应 Action 类的对应方法 , 执行该方法进行业务处理, 处理完毕之后会返回一个结果视图(字符串).

D. 然后根据返回的结果视图 , 到struts.xml 中对应的Action的result结果集配置中 匹配 对应的视图页面(或action).

E. 然后根据 result 的type属性, 转发(或重定向) 对应的页面(或action).

SpringMVCStruts2两个框架对比

1.SpringMVC入口是一个Servlet前端控制器,Struts2入口是一个filter过滤器

2.Struts2通过action类中定义成员变量接收请求参数,只能使用多例模式管理Action;SpringMVC通过在controller方法中定义形参接收请求参数,可以使用单例模式管理controller

3.SpringMVC是基于方法开发的注解开发中使用requestMapping将url和方法进行映射,如果根据url找到controller类的方法生成一个Handler处理器对象(只包括一个method);Struts2是基于类开发,每个请求过来创建一个action实例,实例对象中有若干的方法

4.Struts2采用值栈存储请求和响应的数据,通过OGNL存取数据,SpringMVC通过参数绑定器将request请求内容解析,并给方法形参赋值。

Hibernate和Mybatis对比

1.在移植性方面hibernate配置一下方言即可,而一般情况下Mybatis则需要修改sql语句

2.hibernate是一个完全的ORM框架,完全的面向对象,更符合我们开发者的思维模式;Mybatis需要手动写sql语句

3. hibernate的优化成本比较高.因为hibernate的sql语句是自动生成的,所以在优化方面一般的新手无从下手.而mybatis只要修改sql就可以了.更加容易上手

对Mybatis框架的理解

Mybatis是一个优秀的ORM框架,它对jdbc的操作数据库过程进行了封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection等jsbc繁杂的过程代码,一般使用mapper代理的方式开发,直接在xml里面写sql

Mybatis的工作流程

1.mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了Mybatis的运行环境等信息。

Mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapConfig.xml中加载。

2.通过Mybatis环境等配置信息构造SqlSessionFactory即会话工厂

3.由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行

4.Mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器

5.Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

6.Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。 7、  Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

对Hibernate框架的理解

Hibernate是轻量级的持久层解决方案,是一个关系数据库ORM框架, 对JDBC访问数据库的代码做了封装.我们可以很容易的对数据库进行增删改查操作.

执行原理:

1.读取并解析核心配置文件

2.Configuration负责读取并创建映射信息,创建SessionFactory会话工厂。

3.SessionFactory会话工厂构建Session对象。

4.Transaction开启事务。

5.进行可持久化操作。

6.Transaction提交事务。

7.关闭Session及SessionFactory。

持久化对象的三种状态:

瞬时态:不存在唯一标识OID , 与session未建立关联,未在数据库中存在。

持久态:存在唯一标识OID , 与session已建立关联,在数据库中存在;

当属性发生改变时,清理缓存时会自动和数据库同步。

脱管(离线)态:不存在唯一标识OID , 与session不存在关联,但在数据库中存在。

Hibernate查询方式?

1)主键查询

User u=(User)session.get(User.class, 1);

User u=(User)session.load(User.class, 1);支持懒加载

2)HQL查询

3)Criteria查询

4)本地sql查询

sql和hql的区别?

1)sql是直接操作数据库的

2)hql是通过操作对象操作数据库,对大小写敏感

一级缓存和二级缓存的区别?

一级缓存是session级别的缓存,二级缓存是sessionFactory级别的缓存

hibernate中get和load的区别

get和load都是根据id获取数据

1)get先查询session中对应id是否有数据,如果有则直接返回,有查询数据库,如数据库没有则返回null;

2)load方式查询session中对应id是否有数据,如果没有生成代理对象,查询数据库。没有对应id则抛出异常

SSM、SSH框架原理相关推荐

  1. 【java】 ssm+ssh原生态框架(仅供参考)

    以前刚学框架的时候自己搭建的两个框架,一个是Struts2+Spring+Hibernate-(SSH),还有一个就是Spirng+SpringMVC+Mybatise-(SSM), 其中SSH项目中 ...

  2. SSM,SSH,前端开发技术体系

    1.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄 ...

  3. ssm开发框架原理_SSM 单体框架 - 前端开发:视频讲解

    视频讲解 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com 知乎视频​www.zhihu.com ...

  4. java后台框架 springmvc mybaits 集代码生成器 SSM SSH

    获取[下载地址]   QQ: 313596790   [免费支持更新] 支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [ 新录针对本系统的视频教 ...

  5. ssm旅游管理系统项目介绍_基于jsp的网络相册管理系统的设计与实现

    好程序设计擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON(DJANGO/FLASK).THINKPHP.C#.安卓.微信小程序.MYSQL.SQLSERVER等,欢迎咨询 每天都要 ...

  6. java开发boss直聘要求(2020年4月27日)

    技能要求: 1.精通Java,熟悉设计模式: 2.熟悉Spring.Jersey.MyBatis.shiro.qutarz等框架:熟悉dubbo.springcloud等微服务框架,有微服务开发经验: ...

  7. 最新Java面试题答案

    JAVA基础 JAVA中的几种基本类型,各占用多少字节? 下图单位是bit,非字节 1B=8bit String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final修饰的类 ...

  8. 零基础学怎么学Java_零基础学java难么?怎么自学?

    在计算机发展迅速的今天,越来越多的人去学习编程,其中Java就是大家热衷的语言之一.这时候就有人问,零基础学java难么?下面小编将回答这一问题并给出学习路线. 小编想说,这个实际上要看个人能力以及前 ...

  9. java 面试题汇总

    文章转自与:https://blog.csdn.net/weixin_38399962/article/details/80358168 JAVA基础 JAVA中的几种基本类型,各占用多少字节?   ...

  10. springboot2 war页面放在那_Spring Boot2 系列教程(三十三)整合 Spring Security

    Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经发展了多年了,但是使用的并不多,安全管理 ...

最新文章

  1. SQL语言学习(四)常见函数学习
  2. QT的QRandomGenerator类的使用
  3. linux系统C语言学习总结
  4. python安装第三方库-常见错误解决
  5. 【BZOJ1030】[JSOI2007] 文本生成器(AC自动机上跑DP)
  6. [TJOI2009] 战争游戏
  7. instagram图片大小_一个开源的Instagram桌面照片上传器
  8. Java在程序设计题目中的妙用
  9. 目标检测(十七)--PVANet
  10. linux 下sqlplus里无法使用方向键的解决
  11. 易筋SpringBoot 2.1 | 第三十四篇:Spring Boot导出war包部署到外部Tomcat
  12. 为什么中国电气自动化工程师这么难招
  13. TMS320F280049C 学习笔记21 交叉开关 Crossbar (X-BAR)
  14. php中exec的用法,php exec用法详解
  15. Linux 3.x 的platform
  16. verilog 实现32位加法器(超前进位)
  17. MP530注墨 连供及传真的心得体会
  18. Meet Surprise品牌饰品告诉你不同季节佩戴首饰有什么讲究
  19. Opencv——银行卡识别系统
  20. JavaScript实现环形图echarts

热门文章

  1. c语言程序设计支持win10,win tc 64位下载-wintc C语言编译器64位下载 1.9.1 win10兼容版 - 河东下载站...
  2. TwinCAT3中台达A2增量编码器伺服使用PDO方式回零
  3. oracle学习笔记 学习前奏
  4. 全国计算机等级考试二级教程--C语言程序设计(2018年版) 随手笔记(一)
  5. 现Revit BuiltInParameter.Model中枚举项,都可以用LabelUitls转成本地语言
  6. discuz 论坛DIY增加{lastposter}最后回复者以及{forumicon}版块图标调用解读
  7. 2021年安徽全椒中学高考成绩查询,全椒中学2020届高考记录是这样的!
  8. 八皇后(韩顺平java)
  9. Android8.1 源码添加黑名单拦截电话和短信记录
  10. 最简单的的树莓派安装opencv教程(一键安装)