您的位置:首页 > 编程语言 > Java开发

一个叫Spring的框架,“SSH”框架之总结(Hibernate、Spring、SpringMVC)

2017-07-29 09:54 369 查看

通过学习一个叫Hibernate(冬眠)的框架后,进而学习一个叫Spring(春)的框架!!

在hibernate中我们主要是整合了DAO层对数据库的CRUD操作,而Spring主要是是为了让我们对标准三层架构(MVC)进行整合!
ps:一下是一些我的总结(可能会有点乱,具体可以参看个人项目代码)
ps:代码网盘链接:http://pan.baidu.com/s/1c2ISyjA 密码:bx4r(项目名未规范,但顺都是从小到大!)

1、Spring的主要思想:

概念:
控制反转(IOC):一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。(在service层中声明了一个dao层对象,这是可以不用自己new一个dao层实例对象,而是交给spring来创建)
依赖注入(DI):通过IOC创建了实例对象后,再把实例对象赋值到对象声明的地方,以完成new实例对象并赋值的操作!
面向切面(AOP):面向对象的功能延伸。不是替换面向对象,是用来解决OOP中一些问题。
优点:
IOC、DI:这样就能完成service层和dao层的解耦合!实现低耦合(默认创建对象的方式是:scope=单例)
AOP:方便的实现对程序进行权限拦截、运行监控等功能

2、AOP的相关概念

A)业务场景:

在service层提供30个模块的服务。同时这些模块都依赖某个或某几个公共服务。(权限管理、事务管理、日志管理)

传统方式:使用继承的方式,30个模块都去继承那几个公共服务(然而:想想java是单继承后是不是很恐怖?)

AOP做法:把公共服务定义成“通知类”,而那30个模块的服务定义成“切入点类”;然后把通知类和切入点类结合成“切面”。(这样程序猿们就可以安心做service层业务,也就是这30个模块的服务,而不用在意那几个公共服务...)

B)AOP里的一些知识概念:

Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.

Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.

Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)

Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

Target(目标对象):代理的目标对象

Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程.

spring采用动态代理织入,而AspectJ采用编译期织入和类装在期织入

Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类

Aspect(切面): 是切入点和通知(引介)的结合

ps:下图可以看出AOP的具体分布图



3、Spring初体验...

主要技术:
1、hibernate工具类来定义、获取、使用session
2、DAO层通过HQL语句进行数据查询
3、POJO类(domain)是用注解的方式与数据库的表关联的!
4、IOC

百度网盘可看代码

4、SpringAOP手动配置执行...

主要开发步骤:
1、目标类
2、通知类(实现对应接口,从而分清是哪一类通知)
3、代理类(配置AOP编程)
A)绑定目标类
B)绑定通知类
C)绑定接口关联

百度网盘可看代码

5、Spring自动配置AOP编程...

主要开发步骤:
目标类
通知类(实现对应接口)
代理类(自动配置AOP编程)
A)切入点表达式
B)切入点类与通知类绑定

百度网盘可看代码

6、AsjectJ的XML方式完成AOP编程...

主要开发步骤:
目标类
通知类(可都写在一个随便命名的类中,用不同方法表示不同通知,具体区分用参数列表决定)
AspectJ创建AOP编程

百度网盘可看代码

7、AsjectJ的注解方式AOP编程...

主要开发步骤:
目标类用注解完成
通知类用注解完成
开启全局注解扫描 、开启AspectJ的注解

百度网盘可看代码

8、冬眠过后的春天(Spring和Hibernate整合之一)

SH整合步骤(“天龙八步”):
1、导入依赖的jar包(pom.xml)
2、创建Hibernate主配置文件(hibernate.cfg.xml)
3、创建逆向工程时用到的配置文件(hibernate.reveng.xml)
4、使用逆向工程生成POJO类和映射文件,补全hibernate.cfg.xml中的mapping参数设置
5、DAO层代码开发(HibernateTemplate对象来操作session)
6、Service层代码开发
7、配置Spring主配置文件参数(applicationContext.xml)
8、测试(因为没有定义action层,所以这里使用测试类)
百度网盘可看代码

9、冬眠过后的春天(Spring和Hibernate整合之二)

SH整合步骤(“天龙八步”):

1、导入依赖的jar包(pom.xml)
2、创建Hibernate主配置文件(hibernate.cfg.xml)
3、创建逆向工程时用到的配置文件(hibernate.reveng.xml)
4、使用逆向工程生成POJO类和映射文件,补全hibernate.cfg.xml中的mapping参数设置
5、DAO层代码开发(继承了HibernateDaoSupport类来操作session)
6、Service层代码开发
7、配置Spring主配置文件参数(applicationContext.xml)
8、测试(因为没有定义action层,所以这里使用测试类)
ps:因为“applicationContext.xml”中整合了“hibernate.cfg.xml”的所有配置参数,所以“hibernate.cfg.xml”文件可以删除;而“hibernate.reveng.xml”文件在生成POJO类后就可以删除!
百度网盘可看代码

10、SpringMVC体验一...

XML方式:根据name来查找!!!
A)web.xml
配置中央控制器(前端控制器) :org.springframework.web.servlet.DispatcherServlet
B)applicationContext.xml
配置处理器映射器(HandlerMapping):
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
配置处理器适配器(HandlerAdapter):
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
配置视图解析器(view resolver):
org.springframework.web.servlet.view.InternalResourceViewResolver
配置Action:因为是"BeanNameUrlHandlerMapping",所以根据name来查找!!
C)action层
因为是"BeanNameUrlHandlerMapping",
所以实现"import org.springframework.web.servlet.mvc.Controller;"接口

百度网盘可看代码

11、SpringMVC体验二...

XML方式:根据id来查找!!!
A)web.xml
配置中央控制器(前端控制器) :org.springframework.web.servlet.DispatcherServlet
B)applicationContext.xml
配置处理器映射器(HandlerMapping):
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
配置处理器适配器(HandlerAdapter):
org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
配置视图解析器(view resolver):
org.springframework.web.servlet.view.InternalResourceViewResolver
配置Action:因为是"SimpleUrlHandlerMapping",所以根据id来查找!!
C)action层
因为是"SimpleUrlHandlerMapping",
所以实现"import org.springframework.web.HttpRequestHandler;"接口

ps:处理映射器和处理器适配器的类,在体验一和体验二中不同,要注意相互配对!!
百度网盘可看代码

12、SpringMVC体验三...

注解方式:(重点!!)
A)web.xml
配置中央控制器(前端控制器) :org.springframework.web.servlet.DispatcherServlet
B)applicationContext.xml
Spring自动配置注解处理器映射器和注解处理器适配::
<mvc:annotation-driven></mvc:annotation-driven>
配置视图解析器(view resolver):
org.springframework.web.servlet.view.InternalResourceViewResolver
配置添加注解扫描(扫描com.wq.action层的注解)
<context:component-scan base-package="com.wq.action"></context:component-scan>
C)action层(具体注解请参考代码)
@Controller//标示为控制器
@RequestMapping("/addType.do")//访问路径

ps:这个项目的代码请熟练掌握,因为一般在Action层都是使用注解的方式进行编程!
百度网盘可看代码

13、SSH初体验...

SpringMVC:Spring:Hibernate

SSH八大步骤:
1、pom.xml导入依赖包
2、web.xml 前段处理器、过滤器
3、hibernate.cfg.xml、hibernate.reveng.xml
4、POJO、映射文件
5、Dao层接口和实现类、service层接口和实现类
6、applicationContext.xml文件整合Service层和Dao层(可删除hibernate.cfg.xml、hibernate.reveng.xml)
7、Action层和View层
8、applicationContext.xml文件整合action层
百度网盘可看代码

14、SSH框架实现学生管理系统...

百度网盘可看代码

15、常见的Bug:

A)加载ApplicationContext.xml文件的时候,没有写文件名(第五行代码)



B)在写applicationContext.xml时,“property”标签中关联对象用ref,关联属性、数据类型用value(第26行代码)



C)当使用Spring自动模式配置AOP编程时,getBean()时定义的类型一定要是接口类类型,不能使实现类类型(第14行)



D)SH整合时,通过下面的Hibernate主配置文件参数会默认开启“事务”,但是Hibernate主配置文件参数”hibernate.connection.autocommit”默认的是“false”,所以会报“无效事务”的Bug





E)新建一个项目,只在项目名和Java Resource上报错,在Problems中提示如下信息;修改方法如图二所示,找到该文件,然后如图修改“version”!
(图一)



(图二)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: