面向切面编程AOP

AOP
Aspect Oriented Programming 面向切面编程;
不是技术,而是一种思想,即将分散在各个功能模块(方法)中的共同的功能代码抽取出来,通过动态代理等技术手段将其注入到功能代码中,被抽取出来的部分就是切面
例如:
Filter
service时需要提交事务
Dao时需要创建连接,关闭连接;
通用功能:日志处理,权限检查;
AOP与OOP的区别
OOP面向对象编程,AOP面向切面编程
OOP是纵向的抽取,AOP是横向的抽取;
OOP是面向名词领域,抽取出来的是类,AOP面向动词领域,抽取出来的是切面(功能代码);
AOP不能取代OOP,是对OOP的一种补充;
AOP的相关概念
增强(advice,通知):新增的额外的功能(例如事务管理,日志处理,权限验证);在AOP中一共有五种增强,分别是前置,后置,环绕,返回值,异常;
连接点(JoinPoint):程序执行的某个特定的位置(例如:方法调用前,调用后);
切点(Pointcut):AOP通过切点来定位到特定的连接点
引介(introduction):特殊的增强,为类增加一些属性和方法
织入(weaving):把增强添加到目标类的具体连接点的过程,一共有三种方式:
编译器织入:Aspect
类加载织入
动态代码织入:动态代理
目标对象(target):被代理的对象
代理对象(Proxy):植入增强后的对象
切面(aspect):切入点 + 增强 = 切面;
AspectJ
AspectJ是目前最流行的AOP框架,Spring2.0的版本就已经集成了AspectJ,因此我们可以直接使用;AspectJ运行Annotation和xml两种配置;

使用AspectJ
导包

org.springframework
spring-aspects
5.2.4.RELEASE

创建一个切面类
@Component
@Aspect
public class MyAspect {

	}

为切面类增加增强
@Before(value = “execution(* com.oracle.service..(…))”)
public void before() {
System.out.println(“----------------前置增强被调用”);
}
在spring的配置文件中扫描包,并且让@Aspect生效
aop:aspectj-autoproxy</aop:aspectj-autoproxy>
<context:component-scan base-package=“com.oracle.service,com.oracle.aop”></context:component-scan>
测试
ApplicationContext factory = new ClassPathXmlApplicationContext(“applicationContext_aop.xml”);
BookService service = factory.getBean(BookService.class);
service.save(“兄弟”);
使用AspectJ开发的思路
切面 = 增强 + 切入点
只要有切面,那么Spring就会自动为我们创建代理对象;

需要做的事情
1.定义一个类,这个类是一个切面类@Aspect注解
2.在切面类中定义多个增强,每个增强都是一个方法
3.给每个增强配置切入点(表达式)

FIlter
1.定义一个Filter类
2.在Filter类中定义doFilter方法
3.配置Filter的url_pattern;

AspectJ的五种通知
@Before:前置
@After:后置
@AfterReturning:返回值
@AfterThrowing:异常
@Around:环绕
如果有一个切入点使用了多次,可以使用@Pointcut来手动定义一个
@Pointcut(value = “execution(* com.oracle.service..(…))”)
public void myPointCut() {};
@Before(“myPointCut()”)
public void before(JoinPoint join) {
System.out.println(“----------------前置增强被调用” + join.getSignature().getDeclaringType()+" ."+join.getSignature().getName());
}
如果定义了多个同类型的增强,可以使用@Order来定义执行的顺序;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狠情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值