AOP:
什么是aop?
AOP(Aspect Oriented Programming) 面向切面编程
通过预编译方式和运行动态代理实现程序功能的统一维护
作用:能够无入侵性完成代码
切面:指在执行某些方法时,进入断点(切面)模式,在之前,之后或出现异常等做一些处理,
为什么会出现aop?
Aop和ioc都是解决代码的耦合性,可以增强代码的扩展性和可维护性
AOP实现可分为两类:
预编译方式 :在编译的时候已经做好了aop处理
运行期方式 :在运行时做aop处理
那么什么是Aspectj ?
Aspectj 是一个面向切面的框架,Aspectj定义了AOP语法,Spring AOP底层也是使用了Aspectj的框架来实现操作的。
Spring AOP 和Aspectj的关系?
二者都是AOP技术
二者处理方式不一样:
Aspectj:在编译java代码时,(依赖ajc编译器)编译时增强,编译时增强。(属于静态织入);
Spring AOP:在运行时动态修改类(动态代理),生成新类,称为运行时增强(动态织入)
使用静态织入的方式性能要比动态高,但是动态织入更加方便
Spring AOP原理: 采用动态代理模式。
Spring AOP采用动态代理的过程:
(1) 将切面使用动态代理的方式动态织入到目标对象(被代理类),形成一个代理对象;
(2) 目标对象如果没有实现代理接口,那么Spring会采用CGLib来生成代理对象,该代理对象是目标对象的子类;(3) 目标对象如果是final类,并且也没实现代理接口,就不能运用AOP。
AOP操作术语
Joinpoint(连接点): 类里面可以被增强的方法,这些方法称为连接点
Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Aspect(切面): 是切入点和通知(引介)的结合
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
Target(目标对象):代理的目标对象(要增强的类)
Weaving(织入):是把增强应用到目标的过程.
把advice 应用到 target的过程
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
Spring容器中的Bean
对于开发者来说,开发者使用Spring框架主要是做两件事:①开发Bean;②配置Bean。对于Spring框架来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成"依赖注入"——这就是所谓IoC的本质。
Spring的生命周期
bean的实例化:
1:当作用域范围为singleton时,在初始化Spring容易的时候实例化bean实例。
---1:如果lazy-init的值为true,则为延迟bean的实例化,即在Spring容器启动时不实例化bean的对象
2:当作用域范围为prototype时,在调用Spring的getBean的方法时实例化bean对象
注入依赖对象可以采用手工装配或者自动装配,在实际应用中建议采用手工装配。因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。
bean的属性
id 命名bean,id属性值,不能包含特殊符号
class 创建对象所在类的全路径
name 功能与id一样,但是name可以包含特殊符号
scope 指定bean的作用域
1.singleton:默认单例模式
2.prototype:多例
3.request:创建对象放入request作用域
4.session:同上
5. global session :同上
事物拦截器的实现原理。
spring中的事务管理是通过AOP代理来实现的,对被代理对象的每个方法进行拦截,
在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或回滚。
事务的四大特性:ACID
原子性(Atomicity)事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用
一致性(Consistency) 一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏
隔离性(Isolation) 可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏
持久性(Durability) 一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中
|
|