AOP原理讲解

AOP(Aspect-OrientedProgramming,面向方面编程),能够说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来创建一种对象层次结构,用以模拟公共行为的一个集合。当咱们须要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP容许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码每每水平地散布在全部对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其余类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它致使了大量代码的重复,而不利于各个模块的重用。数据库

而AOP技术则偏偏相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减小系统的重复代码,下降模块间的耦合度,并有利于将来的可操做性和可维护性。AOP表明的是一个横向的关系,若是说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以得到其内部的消息。而剖开的切面,也就是所谓的“方面”了。而后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。编程

 

使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特色是,他们常常发生在核心关注点的多处,而各处都基本类似。好比权限认证、日志、事务处理。Aop 的做用在于分离系统中的各类关注点,将核心关注点和横切关注点分离开来。正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”缓存

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法建立“方面”,从而使得编译器能够在编译期间织入有关“方面”的代码。
安全

AOP使用场景:性能优化

Authentication 权限session

Caching 缓存框架

Context passing 内容传递性能

Error handling 错误处理优化

Lazy loading 懒加载spa

Debugging  调试

logging, tracing, profiling and monitoring 记录跟踪 优化 校准

Performance optimization 性能优化

Persistence  持久化

Resource pooling 资源池

Synchronization 同步

Transactions 事务

hibernate缓存介绍

经过Session的beginTransaction()方法能够获得一个对象的实例。主要用于管理实务。一个事物对象可能会包括多个对数据库进行的操做。

hibernate的缓存:为了提升系统性能,hibernate也使用了缓存机制。在hibernate框架中,主要包含两个方面的缓存,一级缓存和二级缓存。hibernate缓存的做用主要表如今如下两个方面: 1 经过主键(ID)加载数据的时候 2延迟加载中。

一级缓存:hibernate的一级缓存是由session提供的,所以它只存在session的生命周期中。也就是说session关闭的时候该session所管理的一级缓存也随之被清除。hibernate的一级缓存是session所内置的,不能被卸载,也不能进行任何配置。一级缓存采用的是Key-Value的MAP方式来实现的。在缓存实体对象时,对象的主关键字ID是MAP的Key,实体对象就是对象的值。因此说一级缓存是以实体对象为单位进行存储的。访问的时候使用的是主键关键字ID。一级缓存使用的是自动维护的功能。但能够经过session提供的手动方法对一级缓存的管理进行手动干预。evict()方法用于将某个对象从session的一级缓存中清除。clear()方法用于将session缓存中的方法所有清除。

二级缓存:SessionFactory提供的缓存机制能够将缓存分为内置缓存和外置缓存。内置缓存存放了映射文件中数据的副本和预约义SQL语句。SessionFactory的外置缓存就是咱们的二级缓存。它是一个可配置的插件,默认状况下SessionFactory不会启用这个插件,外置缓存的数据是数据库数据的副本。外置缓存的介质能够是内存或者硬盘。二级缓存的实现原理与一级缓存是同样的。也是经过Key-Value的Map来实现对对象的缓存。二级缓存是做用在SessionFactory范围内的。所以它比一级缓存的范围更广。它可被全部的Session对象所共享。须要注意的是放入缓存中的数据不能有第三方的应用对数据进行修改。

Hibernate实体对象的生命周期

实体对象的生命周期主要存在三种不一样状态:瞬态、持久态和游离态。

瞬态:表示该实体对象在内存中是自由自在的。与数据库中的数据没有任何关系。与session没有任何关系,也就是没有经过session的实例对其任何持久化的操做。

持久态:该实体对象处于hibernate框架所管理的状态。也就是说这个对象是与session的实体对象相关的。处于持久态的实体对象的特征就是其所做的任何的变动操做都将被Hibernate持久化到数据库中。咱们能够说持久态的周期与其对应的session的周期息息相关的。hibernate会依据处于持久态的实体对象的属性变化而改变数据库中的对应记录。

游离态:处于持久态的实体对象,当再也不与其对应的session对象相关联时,就处于游离态

相关文章
相关标签/搜索