文档库 最新最全的文档下载
当前位置:文档库 › spring总结文档

spring总结文档

spring总结文档.txt爱情就像脚上的鞋,只有失去的时候才知道赤脚走路是什么滋味骗人有风险,说慌要谨慎。不要爱上年纪小的男人,他会把你当成爱情学校,一旦学徒圆满,便会义无反顾地离开你。Spring 优势:
控制反转(ioc)---开发人员不必再在代码中维护对象间的依赖关系,通过配置文件来实现
1、模块之间不进行直接相互调用 2、抽象类不能依赖于实现类 3、应用不应该依赖于容器


面向切面编程(aop)
持久层的封装和事务管理---提供了对持久层的整合功能
提供了对web的各种支持

oop提高了代码的重用 设计模式解决了模块间的耦合 aop解决了某个模块内部的变化

持久化:
1、通过会话bean和实体bean来实现数据持久化(该方法会耗费内存,影响系统运行速度)
2、通过dao和jdbc来实现数据持久化
3、通过dao和orm组件实现数据持久化

耗费内存和性能对比 1大于3大于2


spring事物管理的核心功能框架有3个接口定义:
1、PlatformTransactionManager
org.spirng.framework.transaction.platform.TransactionManager

该接口有3个方法:
void commit(TransactionStatus status)
void rollback(TransactionStatus status)
TransactionStatus getTransaction(TransactionDefinition definition)
2、TransactionDefinition
用于定义事物策略。
int getlsolationLevel():得到当前事物的隔离级别
int getPropagationBehavior():得到事物的传播性
int getTimeout():得到事物的超时时间
boolean isReadOnly():判断事物是否为只读事物
3、TransationStatus
该接口代表了事物状态信息
boolean isCompleted()
boolean isNewTransaction()
boolean isRollbackOnly()

事物管理的方式有两种:
声明式事物管理:
1、配置数据源
2、配置事物管理对象
3、配置事物策略





4、配置AOP




注解式事物管理:



spring jdbc抽象框架有4个核心包组成:
core(核心包) 核心类----org.spring.framework.jdbc.core.JdbcTemplate
作用:通过该类可以方便执行数据的增加、修改、删除、查询语句,并且可以完成对存储过程的调用
jdbcDaoSupport类不是一个操作的模板类,它是为了提供对DAO的支持
dataSource(数据源包)
object(对象包)
support(支持包)



orm-----对象关系映射

2001 hibernate第一正式版本发布
2002 6月 第二版
2005 4月 第三版


hibernate进行持久化操作的步骤:
1、创建Configuration对象
2、创建SessionFactory对


3、创建Session对象
4、开始一个事物
5、进行持久化操作
6、结束事物
7、关闭Session

hibernate常用类:
org.hibernate.Hibernate
org.hibernate.Session 作用:持久化操作的核心(线程不安全)、用于读取,创建和删除
映射的实体对象的实例(这些操作将转化为对数据库表数据的增加、删除、查询)
Configuration config = new Configuration().config();
SessionFactory sessionfactory = config.buildSessionFactory();
Session session = sessionfactory.openSession();


org.hibernate.SessionFactory 作用:生成Session对象,一个应用程序只有一个SessionFactory实例且不能改变(线程安全)
Configuration config = new Configuration().config();
SessionFactory sessionfactory = config.buildSessionFactory();


org.hibernate.Transaction
用于管理事物 commit rollback

org.hibernate.Query 作用:执行HQL语言并完成对象的检索操作
org.hibernate.Criteria
org.hibernate.ScrollableResults

org.hibernate.cfg.Configuration 作用:读取配置文件并创建SessionFactory对象
创建Configuration对象实例的方法:
Configuration config = new Configuration().config();
hibernate会自动在当前classpath指定路径内查找hibernate.cfg.xml文件,并加载到内存里
还可以直接指定路径创建该对象:
File f = new File("d:\\e\hibernate.cfg.xml")
Configuration config = new Configration().config(f);

实体对象的3种状态:Transient(瞬态) Persistent(持久态) Detached(游离态)

实体对象的操作方法:
save() 相当于数据库执行insert语句(可以将Transient状态的实体对象变为Persistent状态)
User user = new User();
user.setName("ddd");
user.setPassword("ddd");
Transaction tx = session.beginTransaction();
session.save(user);
tx.conmit();
session.close();
Session对象的save()方法进行了以下工作:
1、将对象加入缓存中,并标识为Persistent状态
2、根据映射文件配置生成实体对象的唯一标识符。具体生成方式方法由元素决定
注意:如果配置文件中指定了元素,那么在这里通过调用setId()方法来为其人为
设置主键的做法将徒劳
3、对于指定了元素的实体对象,如果希望自己指定主键值,可以调用Session对象
的save()方法的一个重载方法save(Object object,Serializable id)来实现


update()
User user = new User();
user.setName("ddd");
user.setPassword("ddd");
user.setId("234234");
Transaction tx = session.beginTransaction();
session.update(user);
tx.conmit();
session.close();
当事务结束后,实体对象的值才会更新到数据库中
注意:不是所有更新操作都在事务结束后才执行,当后面需要执行同表数据库查询时
,为保证查询结果的准确性,这时候数据库更新会被立即执行。

通过在同一个Session中调用get(

)或者load()方法,也不能导致数据库更新语句立即执行


saveOrUpdate() hibernate依据实体对象的状态决定执行哪种操作,如果传入实现对象是
Transient状态,那么执行save()操作;如果传入实体对象是Detached状态,就执行update()
状态;如果传入的是persistent状态,就直接返回,不进行任何操作

delete()
User user = new User();
user.setId("234234");
Transaction tx = session.beginTransaction();
session.update(user);
tx.conmit();
session.close();

get()
通过该方法只能得到唯一的一个持久化对象,如果该对象不存在,那么返回值为空

load()
通过标识符得到指定类的持久化对象实例。和get方法区别是要确保要得到持久化对象实例的存在
否则将产生异常信息

contains() 用于判断一个实体对象是否与当前session对象关联,可用来判断实体对象是否
处于persistent状态

evict() 用于移除实体对象与session对象间的关系,将实体对象由Persistent状态转为Detached

创建查询对象:
createQuery() 创建一个query查询接口实例,该实例可以利用HQL语言进行数据库查询操作
Query query = session.createQuery("from User as u where u.age > :userAge");
query.setInteger("userAger",20);
List list = query.list();


createCriteria() 创建一个criteria查询接口实例
OBC查询,将数据封装成一个对象
Criteria本身只是查询容器,具体通过调用add()方法进行添加
List cats = session.createCriteria(Cat.class)
.add(Restrictions.like("name","Ix%"))
.add(Restrictions.gt("weight",new Float(100)))
.addOrder(Order.asc("age"))
.list();
相当select * from cat where name like 'Ix%' and weight>100 order by age asc



createSQLQuery() 创建一个SQLQuery查询接口的实例。可以通过标准的sql语句来执行操作语句

createFilter() 通过一个对象的集合一下查询的HQL语句来生成一个Query对象实例


hibernate三种检索方式:HQL(面向对象查询语言)、QBC和SQL

对HQL进行查询,参数有三种处理方法:
1、直接将参数拼接为HQL语句
Query query = session.creareQuery("from User as u where u.age>20");
List list = query.list();

2、通过参数名称来标识参数
Query query = session.createQuery("from User as u where u.age > :userAge");
query.setInteger("userAger",20);
List list = query.list();

3、按照参数的位置设置参数值
Query query =session.createQuery("from User as u wher u.age>?");
query.setLong(0,20);
List list = query.list();
三种绑定参数的查询方法建议使用第二种方法
第一种拼接语句不易维护,每执行一次都要进行解析和运行,不利于发挥数据库缓存的作用
第三种方法维护麻烦且不直观

返回结果集的三个方法:
list() 返回一个list对象,可以按照索引的位置随机访问结果集中的对象。
采用该

方式hibernate将所有数据都转化为实体对象,不管是否用到该对象,照成资源浪费

iterator()
返回iterater对象,只能按照从前到后的顺序依次读取数据库记录。
优点:不用一次读取所有数据并转为实体对象,避免了资源浪费
缺点:只能按顺序查询结果集,不知道结果集中记录的数目

uniqueResult()
返回唯一结果对象,在确信只有一个满足条件的记录时使用该方法

hibernate3新特性,支持批量数据更新和删除,通过Query对象
Tansaction tx = session.beginTrasaction();
String hql ="update User set age=age+1";
Query query =session.createQuery(hql);
query.executeUpdate();
https://www.wendangku.net/doc/862847329.html,mit;
session.close;

Tansaction tx = session.beginTrasaction();
String hql ="dekete User set age=1";
Query query =session.createQuery(hql);
query.executeUpdate();
https://www.wendangku.net/doc/862847329.html,mit;
session.close;



hibernate映射:



Jakarta commons logging(JCL)组件:日志组件
1、fatal 非常严重的错误 导致系统终止
2、error 其它运行期错误或不是预期的条件
3、warn 错误使用api
4、info 运行时产生有意义的事情
5、系统流程中的细节信息。
6、trace 更加细节的信息


web应用体系结构:
1、表示层(struts------action、actionform、struts-config.xml、jsp)
2、业务层(spring------事物管理、会话管理、业务类)
业务层主要功能:
处理业务逻辑和进行业务判断
事物管理
通过使用接口和其它层交互
管理业务层对象的依赖性
可以增加表示层和持久层的灵活性,使它们之间不会有交互
实现一个业务的上下文,便于表示层调用业务层的服务
管理持久层的实现
3、持久层(hibernate----数据源连接池、查询语言支持及hibernate其它服务)
4、域模型层


数据库的隔离级别:
解决并发数据访问,可采用锁的机制来实现数据访问的排他性,从而避免两次更新问题的发生
锁分为乐观锁和悲观锁两类

悲观锁(pessimistic locking):悲观地认定每次资料存取,其它客户端也会存取同一笔
数据,因此将会锁住该笔数据,直到自己操作完成后再解锁。(注意:如果在网络系统,该方法会照成效能上的问题)

hibernate缓存机制包括:一级缓存和二级缓存。
主要表现:通过主键(ID)加载数据的时候、延迟加载中

一级缓存:有session提供,它存在于session的生命周期中,当session关闭时候该session管理的一级缓存也会立即消除
session提供的干预方法:
evict()---将某个对象从session的一级缓存中清除
clear()---将一级缓存中的对象全部清除。(当进行大批量一次性更新时,调用该方法,避免内存溢出)
例:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
for(int i=0;i<100000;i++){

Costomer customer = new Customer();
session.save(customer);
if(i%20==0){
//将本批插入的对象立即写入数据库并释放内存
session.flush();
session.clear();
}
}
https://www.wendangku.net/doc/862847329.html,mit();
session.close();

二级缓存:与session相对SessionFactory也提供了缓存机制,分为内置缓存和外置缓存

外置缓存的介质是内存和硬盘,SessionFactory的外置缓存被称为Hibernate的二级缓存

二级缓存的工作:
1、在执行各种条件查询时,如果获得的结果集为实体对象的集合,那么就会把所有的数据
对象根据ID放入到二级缓存中
2、当Hibernate根据ID访问数据对象的时候,首先会从Session一级缓存查询,如果找不到
并且配置了二级缓存,那么会从二级缓存中查找,如果还查不到就去数据库查询,把结果按照ID放入缓存中。
3、删除、更新、增加数据的时候,同时更新缓存

适合放到二级缓存的数据:
1、很少被修改的数据
2、不是很重要的数据,允许出现偶尔并发的数据
3、不会被并发访问的数据
4、参考数据

不适合放到二级缓存的数据:
1、经常被修改的数据
2、财务数据,绝对不允许出现并发
3、与其他应用共享的数据

二级缓存的配置:
region="RegionName"
include="all|non-lazy"/>

hibernate二级缓存的步骤:
1、在Hibernate配置文件(通常为Hibernate.cfg.xml),设置二级缓存的提供者类
2、配置EHCache的基本参数
3、在需要进行缓存的实体对象的映射文件中配置缓存的策略
org.hibernate.cache.EhCacheProvider
ehcache.xml 二级缓存配置文件


hibernate优化时要考虑的问题:
1、数据库设计调整
2、HQL优化
3、API的正确使用(如根据不同的业务类型选用不同的集合及查询API)
4、主配置参数(日志、查询缓存、fetch_size、batch_size等)
5、映射文件优化(ID生成策略、二级缓存、延迟加载、关联优化)
6、一级缓存的管理
7、针对二级缓存,还有许多特有的策略
8、事物控制策略

数据库设计阶段考虑的3个因素:
1、java建模
2、数据库结构
3、业务需求

影响系统性能的操作及处理方案:
1、批量插入、更新和删除

使用正确的查询方法:
执行数据查询功能的方法有两种:
一种是得到单个持久化对象的get()方法和load()方法 二者区别是是否使用二级缓存
另一种是Query对象的list()和iterator()方法

list方法和iterator方法的区别:
1、执行的查询不同
2、缓存的使用
3、对结果集的处理方法不同
4、使用正确抓取策略


面向切面编程:
Aspect(切面):对象操作过程中的截面。如权限检

查、日志、事务处理等。
Join Point(连接点):程序运行中的某个阶段点。如某个方法调用,异常抛出等。
Advice(处理逻辑):某个连接点所采用的处理逻辑。
PointCut(切点):一系列连接点的集合,它指明Advice在什么时候被触发


AOP通俗定义:在顺序执行程序时,可以插入一些特殊的逻辑来实现特殊的功能。例如:日志和数据库事物管理的实现

AOP把软件系统分为:核心关注点和横切关注点
核心关注点指事务处理的主要流程,也就是解决方案要做的事
横切关注点,是与核心业务无关的部分,它常发生在核心关注点的多处,如日志-权限等

AOP基本术语:
连接点(jion point) 对某个方法的调用点
切入点(point cut) 切入点表达式与连接点的匹配时实现aop的技术核心
通知(Advice)是指在某个切入点所执行的代码。分为多种类型
切面(Aspect)是指对关注点的模块化的处理,也就是切入点和通知的结合体
引入(introduction)是指为对象增加额外的方法或属性,从而达到修改对象内部结构的目的
目标对象(Target Object)是指被一个或者多个切面所通知的对象
AOP代理(AOP proxy)由AOP框架创建的对象,用来实现切面契约(包括通知方法执行等功能)
织入(Weaving)指将切面连接到其他应用程序类型或者对象上,并创建一个被通知对象

aop对通知类型的支持,通知类型包括:
1、前置通知(Before advice)指连接点方法之前执行的通知
2、返回后通知(after returning advice)指某个连接点方法正常完成后执行的通知
3.异常后通知(after throwing advice) 连接点方法抛出异常退出时执行的通知
4、后置通知(after advice) 无论任何情况下连接点方法退出时执行的通知,也就是无论连接点方法正常退出还是抛出异常都会执行此通知
5、环绕通知(around advice) 指包围连接点方法的通知

注意:所有的切面和通知器都必须定义在元素内部。

切面声明:
通过来声明,必须放置到元素内部

....




切入点声明:
通过元素进行声明,位置可以发在切面声明里(相当于局部变量),也可直接放在元素内部(相当于全局变量),两者作用域不同



元素中,id属性定义的是切入点的唯一标识。expression定义的是切入点表达式,用来确定某个方法是否与该切入点匹配
spring会利用切入点表达式来判断所定义的切入点与当前执行

时的连接点是否匹配

切入点指定者(pointcut Designators)
切入点表达式是通过切入点指定者来进行定义的
规则如下:
execution
execution(public**(..))匹配任意公共方法
execution(* set*(..)) 匹配任何以“set”开头的方法

声明通知:
前置通知
返回后通知
抛出异常后通知
后置通知
环绕通知

几种通知共同的属性:
pointcut:切入点表达式
pointcut-ref:执行本通知时需要满足的切入点
method:在该切面所执行的方法
args-names:指定传给通知的参数
pointcut-ref="dataAccessOperation"
returning="retVal"
method="doAccessCheck"/>



spring ioc容器的根基接口:org.springframework.beans.factory.BeanFactory
常用类:org.springframework.beans.factory.xml.XmlBeanFactory类

容器初始化接口:org.springframework.core.io.Resource

Resource resource = new FileSystemResource("/usr/local/bean.xml");
Beanfactory beanfactory = new XmlBeanFactory(resource);

ClassPathResource cpr = new ClassPathResource("bean.xml");
BeanFactory beanfactory = new XmlBeanFactory(cpr);

ioc容器的使用:
1、业务处理对象 有IocService类进行模拟 属性:message 方法:display()
2、XML格式的配置文件 定义IoCService Bean 对message属性进行配置
3、IoC容器初始化和业务方法的调用

spring IoC容器除了可以管理业务对象外,还可以管理访问数据库的dao和表示层

IoC框架对常用的对象实例化方法和设计模式都提供了支持,主要有以下三种:
1、使用构造方法创建Bean实例

2、使用静态工厂方法创建Bean实例

3、使用实例化工厂方法创建Bean实例


以上配置相当于:
DynamicFactory df = new DynamicFactory();
DynamicFactoryBean dfb = new df.getDynamicFactoryBeanInstance();

相关文档
相关文档 最新文档