Spring AOP

来源:互联网 发布:模拟电子琴软件下载 编辑:程序博客网 时间:2024/06/06 08:25

AOP是面向切面编程 ,SpringAOP 的底层技术-动态代理。

AOP 通过动态代理模式,管控各个对象的切面环境,管理包括日志,数据库事务等操作。

一些常用的流程中,比如数据库事务, AOP会提供默认的实现逻辑,降低开发工作量,开发集中在业务逻辑上。

AOP 就是在方法前,方法后, 方法有异常,无异常 时执行相关的拦截方法。

面向切面编程相关术语 :

.切面:拦截器。

.通知:切面的方法, 前置通知,后置通知,返回通知 ,异常通知,环绕通知 。

.连接点:某个类的某个方法作为连接点,通过切点的正则表达式判断哪些方法是连接点。

.切点:告诉AOP在什么时候启动拦截并织入对应的流程中,通过正则表达式进行限定。

.引入:引入允许我们在现有的类里添加自定义的类的方法。

.织入:是一个生成代理对象并将切面内容放入到约定流程中的过程。Spring的规则:当类的实现存在接口时,spring将提供JDK动态代理,从而 织入各个通知,没有接口就采用CGLIB来生成代理对象。

 

Spring对AOP的支持

AOP并不是spring框架特有的,只是支持者之一。

Spring实现AOP的拦截功能有4 种 :

. 使用ProxyFactoryBean和对应的接口

. 使用XML配置-常用

. 使用@AspectJ注解 -常用

. 使用AspectJ注入切面

使用@AspectJ注解开发SpringAOP

创建切面:@Aspect 作用于类

@Before(“execution(*com.ssm.testAspect.aop.printRole(..))”) 定义连接点 和 定义切点。

. execution: 代表执行方法是触发

.*:代表任意返回类型方法

.(..) : 任意的参数

@Pointcut 定义一个切点, 以后可以使用, 例如

                @Pointcut(“execution(*com.ssm.testAspect.aop.printRole(..))”)publicvoid print(){}

@Before(“print()”)public voidbefore(){syso(“before…”)}

测试AOP

@EnableAspectJAutoProxy 启用AspectJ 框架的自动代理 , 这个时候才会生成动态代理对象,进而可以使用AOP。

也可以通过XML方式<aop:aspectj-autoproxy />

使用XML配置开发springAOP

<aop:config>---定义aop内容信息

                <aop:aspect>定义切面

                                <aop:before>定义通知

原创粉丝点击