简单谈谈自己对SSH框架的理解

J2EE开发框架其实也是jar类库,大部分是对原生方法的封装。目的是为了简化开发人员的工作,规范开发过程。学习框架即学习其核心原理和配置。

但java世界的框架五花八门,但万变不离其宗,只有真正掌握了SSH框架的核心机制和设计理念才能轻松的学好其他框架。

下面谈谈我对SSH框架的简单理解,以备今后面试找工作之用。

一、Hibernate

Hibernate框架是一个ORM框架,是对JDBC的封装。目的就是为了简化对数据表访问的操作。

ORM是对象关系映射,通过让pojo类与数据表建立映射,即可通过持久层操作来代替SQL语句访问数据库。

那么Hibernate框架的核心原理就是ORM,通过Java反射机制实现。

配置文件包括:

1)Hibernate.cfg.xml   存储连接数据库的信息。

2)tablename.hbm.xml  配置pojo类和数据表的关联关系


jdbc操作数据库的代码如下

public static Connection getConnection() {
  try {
   Class.forName("com.mysql.jdbc.Driver");
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
   return conn;
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }
public static void main(String[] args){
   Connection con=getConnection();
   Statement st=con.createStatement();
   String sql="select * from user";
   ResultSet re=st.executeQuery(sql);
}

JDBC时代,我们用Dao对数据表操作进行封装,往往每个数据表都要对应一个Dao类,并且需要写sql语句,这样就造成了代码冗余。


而如今hibernate使得我们不需要再创建多个Dao类。只需一个Dao,往里面传入相应的pojo类,通过反射机制获取该pojo类的属性字段拼凑成一条sql语句,我们要做的只往里面传入参数即可,不用写sql语句,所以说不会写sql语句的人也可以使用hibernate对数据库进行读写操作。


核心类
Session接口:负责持久化对象的CRUD操作
SessionFactory接口:负责初始化Hibernate
Configuration接口:负责配置并启动Hibernate
Transaction接口:负责事务
Query接口和Criteria接口:负责执行各种数据库查询


持久层对象的3个状态
(1)自由状态(瞬时态):不曾持久化,未与任何Session相关联
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系
session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。 
(2)持久化对象:仅与一个Session相关联
1. 和session实例关联; 
2. 在数据库中有与之关联的记录
hibernate的delete()方法,对应的持久对象就变成瞬时对象,因数据库中的对应数据已被删除,该对象不再与数据库的记录关联。 
当一个session执行close()或clear()、evict()之后,持久对象变成托管对象,此时持久对象会变成托管对象,此时该对象虽然具有数据库识别值,但它已不在HIbernate持久层的管理之下。
(3)游离状态(托管态):已经进行过持久化,但当前未与任何Session相关联
托管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法,转变成持久对象。 
1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收; 
2. 比瞬时对象多了一个数据库记录标识值




二、struts2
struts2是一个MVC框架,其核心控制器filterDispatch充当了一个控制器(conroller)的角色。
相对于struts1来说,struts2的框架结构变化非常之大。struts1是对原生servlet的封装,而struts2是对webwork的改进和封装。
其核心机制是拦截器原理,也是基于Java反射机制的实现。通过URL解析出的action名和方法名,检索并执行出相应的action类以及拦截器类。
核心类说明:

类名

说明

org.apache.struts2.dispatcher. Dispatcher

该类有两个作用:

1、初始化

2、调用指定的Actionexecute()方法。

org.apache.struts2.dispatcher. FilterDispatcher

这是一个过滤器。文档中已明确说明,如果没有经验,配置时请将url-pattern的值设成/*

  该类有四个作用:

1、执行Action

2、清理ActionContext,避免内存泄漏

3、处理静态内容(Serving static content

4、为请求启动xwork’s的截拦器链。

com.opensymphony.xwork2. ActionProxy

Action的代理接口。

com.opensymphony.xwork2. ctionProxyFactory

生产ActionProxy的工厂。

com.opensymphony.xwork2.ActionInvocation

负责调用Action和截拦器。

com.opensymphony.xwork2.config.providers. XmlConfigurationProvider

负责Struts2的配置文件的解析。




一个请求在Struts2框架中的处理大概分为以下几个步骤:
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;
5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper。



三、Spring

Spring是一个免费开源的容器框架,它是为了解决企业应用开发的复杂性而创建的。提起spring就不得不提起两大核心思想:IoC和AOP

先谈IoC,称为控制反转,又叫依赖注入。其实不管是控制反转还是依赖注入,他们都可以这样理解:当某个Java实例(调用者)需要另一个Java实例(被调用者)时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例。但是在依赖注入/控制反转模式下,创建被调用者的工作不再是有调用者来完成,而是由Spring容器来完成,然后注入调用者。

依赖注入通常有如下两种:

 1、  设置注入:IoC容器使用属性的setter方法来注入被依赖的实例。

 2、  构造注入:IoC容器使用构造器来注入被依赖的实例。

 Spring IoC容器有如下3个基本要点:

1、 应用程序的各个组件面向接口编程。面向接口编程可以将各个组件的耦合提升到接口层次,从而有利于项目后期的扩展。

2、 应用程序的各组件不再由程序主动产生,而是由Spring容器来负责产生,并初始化。

3、 Spring采用配置文件、或者Annotation来管理Bean的实现类、依赖关系,Spring容器则根据配置文件,利用反射机制来创建实例,并为之注入依赖关系。



发布了3 篇原创文章 · 获赞 3 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章