AOP

昨天看见同事的项目中用aop监控慢sql,觉得aop慢强大的,看了写基本概念,写了个简答例子
spring中对aop支持很友好,完全spring的方式配置,引入aop有2中方式@aspectj 和基于scheme配置方式,@aspectj用起来比较简洁和方便,所以例子用@aspectj完成的,觉得比较难理解的有1、切点和连接点的概念 2、切点表达式,切点表达式可以完成一个比较复杂的切点,功能蛮强大,下次用到时仔细看下
准备工作
1、搭建spring环境,我用的是webx(阿里巴巴web框架)
2、引入依赖 asm asm-common asm-utill aspectjart 共4个jar包报名可能打的不对
如有间接依赖按照报错添加依赖,貌似用到commond-logging包
3、选个想被代理的方法(pointcut),本步骤不许任何配置和aop没关系,可以是普通beans的方法
public class TestAO {
public void sayHelloWorld(String name) {
System.out.println("+++sayHelloWorld to"+name);
}
public static void main(String[] args) {
}
}

4、写需要织入的逻辑(增强),切点+增强=切面, 连接点(joinpoint)和切点(pointcut)的概念容易混淆,还是记英文比较好记一些

@Aspect
public class PreReadHttpXml{
@Before("execution(* sayHelloWorld(..)) && args(name)")
public void beforeGreeting(String name){
System.out.println("=====================begin sayHelloWorld to"+name);
}
}

@Aspect 注解表明这是一个切面,前面说过切面=切点+增强(advance这个单词解释有很多)

("execution(* sayHelloWorld(..)) && args(name)")
这是一个切点表达式,定义了一个切点,name必须和下面增强方法中参数名相同,具体切点表达式如何定义可以在网上搜一下
5、把advance放到spring容器中

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" ①
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop ②http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<aop:aspectj-autoproxy/>
<bean class="com.alibaba.webx.tutorial1.aop.PreReadHttpXml" />
</beans>

首先,在配置文件中引入aop命名空间,如①、②处所示,然后通过aop命名空间的<aop:aspectj-autoproxy />声明自动为Spring容器中那些匹配@AspectJ切面的Bean创建代理,织入切面。当然,Spring在内部依旧采用AnnotationAwareAspectJAutoProxyCreator进行自动代理的创建工作,但具体实现的细节已经被<aop:aspectj-autoproxy />隐藏起来了。
6、启动web工程(如果只是为了测试aop其实不需要启动容器的),然后调用被advance的方法
advance成功织入,是不是很简单
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值