通过学习一个叫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自动配置注解处
理器映射器和注解处理器适配::
配置视图解析器(view resolver):
org.springframework.web.servlet.view.InternalResourceViewResolver
配置添加注解扫描(扫描com.wq.action层的注解)
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”!
(图一)
(图二)