1.Spring MVC和structs均属于java web mvc框架,作用都是接收request请求,中间调用业务逻辑代码,最后返回response响应。
2.ioc,依赖注入,典型的工厂模式,通过sessionFactory去注入实例,意味着将你设计好的类交给系统 去控制,而不是在你的类内部控制。通俗的讲就是如果在什么地方需要一个对象,你自己不用去new 生成你需要的对象,而是通过spring为你产生这样的对象。
3.Spring MVC是一个基于DispatcherServlet的MVC框架,DispatcherServlet是继承自HttpServlet的。Spring的IOC和AOP主要就用了java的反射技术。AOP可以说是OOP的补充和完善,OOP允许你定义从上到下的关系,但并不适合从左到右的关系。AOP,简单的说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度。
web.xml中SpringMVC的配置
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispacherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-name>contextConfigLocation</param-nam>
<param-value>classpath*:config/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
spring-mvc.xml
<!-- 启用spring mvc注解-->
<context:annotation-config />
<!-- 设置使用注解的类所在的包路径 -->
<context:component-scan base-package:包路径 >
</context:component>
DispatcherServlet会利用一些特殊的bean来处理Request请求和生成相应的视图返回,到底返回的是什么视图,是由视图解析器控制的,在JSP中常用的视图解析器是InternalResourceViewResolver。
HandlerMapping接口:处理请求
|-----SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller
|----DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上:(已被RequestMappingHandlerMapping取代)
HandlerAdapter接口
|----AnnotationMethodHandlerAdapter 通过注解,把一个URL映射到Controller类的方法上
RequestMappingHandlerAdapter和RequestMappingHandlerMapping配对使用。
4.Spring框架的七大模块
(1)spring core 提供Spring框架的基本功能
(2)Spring context 一个配置文件,向Spring 框架提供上下文信息
(3)Spring AOP 将面向方面的编程功能集成到Spring框架中
(4)Spring DAO 面向DAO
(5)Spring ORM 若干个ORM框架
(6)Spring web模块
(7)SpringMVC
5.Hibernate中get和有什么不同之处
如果缓存中没有找到相应的对象,get将会直接访问数据库并返回一个完全初始化好的对象,而load方法在缓存中没有发现对象的情况下,只会返回一个代理对象,只有在对象getID之外的其它方法被调用时才会真正访问数据库。
6.Hibernate的sessionFactory
一个用于创建Hibernate的session对象的工厂,作为一个单个的数据存储,它是线程安全的,session负责维护同数据库的连接,是非线程安全的。
7.Hibernate的核心接口一共5个
(1)Session接口,负责执行被持久化对象的CRUD操作
(2)SessionFactory接口,不是轻量级的,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory.
(3)Configuration接口,定位映射文档位置,读取配置
(4)Trasaction接口,负责事务相关的操作
(5)Query和Criteria接口,负责执行各种数据库查询,可以使用hql语言或sql语言两种表达方式。
8.Hibernate主键
(1)assigned
由用户决定,与底层数据库无关。用户需要维护主键值,在调用session.save()之前要指定主键值。
(2)Hilo
需要额外的数据库表的支持,能保证同一个数据库中主键的唯一性,但不能保证多个数据库之间主键的唯一性。由Hibernate维护主键,与底层数据库无关。
(3)Increment
要求底层数据支持sequence,由Hibernate本身维护,适合单一进程访问数据库,不能用于集群环境。
(4)Indentity
与底层数据库有关,要求数据库支持Indentity.
(5)Seqence
需要底层数据库支持sequence
(6)Native
会根据不同的底层数据库自动选择Indentity,Sequence,Hilo主键生成方式。
(7)UUID
保证网络环境下的主键的主唯一性。
9.Hibernate缓存机制
(1)一级缓存(应用事物缓存)
(2)二级缓存
第一级是Session级别的缓存 ,由Hibernate管理,一般不需要干预。
第二级是SessionFactory级别的缓存,它可以进行配置和更改。
Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
一级缓存的管理:当应用程序调用Session的save() update() saveOrUpdate get load以及调用查询接口list iterate 或filter方法时,如果session缓存中还不存在相应的对象,hibernate就会把该对象加入到第一级缓存中,当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。
二级缓存的管理:
(1)条件查询时,一次获得所有的数据对象。
(2)把获得的所有数据对象根据ID放入到第二级缓存中
(3)当Hibernate根据ID访问数据对象时,首先从一级缓存中查,查不到如果配置二级缓存,那么从二级缓存中查,查不到,再查询数据库。
(4)删除、更新、增加数据时,同时更缓存。