开发者社区> 乒乓狂魔> 正文

Spring AOP源码分析(一)AOP介绍和aspectj、SpringAOP入门

简介:
+关注继续查看
首先说说三个名词,面向对象、面向接口编程、面向切面编程(Aspect Oriented Programming 即AOP)。 
针对java来说 
面向对象:是对现实世界的描述,是后两者的基础,大前提。 
面向接口编程:接口就是一组规则的集合,这组规则可以有不同的实现方式。如JDBC,它本身仅仅是接口规范,不同的数据库有不同的实现,我们通过JDBC这样的接口编程,就无需关心我们使用的是哪种数据库,可以方便的实现数据库的切换而不必改动代码。 
面向切面编程:是对面向对象的补充,主要应用的场景为: 
              (1):权限拦截 
              (2):方法监控 
              (3):日志记录 
虽然这些场景有时可以使用其他方案解决,从侵入性方面来看,AOP绝对是一个好的方案。 

然后又是几个大名词:AOP、Spring AOP和aspectj和jboss AOP 
AOP:首先是AOP联盟约定了几个概念,如Joinpoint、Pointcut、Advice等。 
              (1) Pointcut:拦截点表达式, 
              (2)Joinpoint:符合上述Pointcut表达式的一个具体的拦截点。他们的关系就 
                            像正则表达式和符合该正则表达式的对象一样。 
              (3)advice:如拦截到对应的某个方法后,我们要做写什么?advice就是拦截后 
                        要执行的动作。 
      总结下来就是说,在符合所有pointcut的拦截点上执行advice动作。 
aspectj和jboss AOP对于上述约定进行了具体的实现,独立与其他。 

Spring AOP:将aspectj的实现加入到Spring大军中,使得AOP与Spring可以更好的融合起来为开发提供方便的服务。 

接下来,我们就需要从aspectj单独来看看AOP,然后就是SpringAOP的使用。最后就是本系列的重点,SpringAOP是如何通过aspectj来实现AOP编程的。 

从aspectj单独来看看AOP: 
学习方式一:看aspectj的官方文档    
            http://www.eclipse.org/aspectj/doc/released/progguide/index.html 
学习方式二:已经有人总结了aspectj的aop系列,参见:      
             http://blog.csdn.net/zl3450341/article/category/1169602 
我在这里只说下,注意的事项。 
使用eclipse来开发aspectj项目,需要安装AJDT插件,目前最新的AJDT插件为2.2.3,支持的eclipse版本如下,后面为安装插件的地址:
Eclipse 4.3 Kepler-》 http://download.eclipse.org/tools/ajdt/43/update 
Eclipse 4.2 and 3.8 Juno -》 http://download.eclipse.org/tools/ajdt/42/update 
目前还不支持最新的Eclipse 4.4 Luna。 
所以先去上面学习地址中先去体验一把aspect的AOP,然后你才能更好的理解SpringAOP。 

使用SpringAOP:采用xml配置和注解两种方式来使用Spring Aop。 
要解决的第一个问题就是,pom的依赖 

1
2
3
4
5
6
7
8
9
10
<dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-aop</artifactId>
         <version>4.0.5.RELEASE</version>
   </dependency>
   <dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.2</version>
   </dependency>

aspectjweaver是aspectj对AOP的实现。spring-aop是对aspectj进行Spring的封装和引入。 
方式一:采用xml配置的方式 
具体的例子可以详细参见这篇文章:http://www.iteye.com/topic/336873 
方式二:采用注解配置的方式 
可以参见http://tonl.iteye.com/blog/1966822 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring 源码阅读 62:基于 JDK 的 AOP 代理对特殊方法调用的处理
本文深入分析了 JdkDynamicAopProxy 的invoke方法的第一部分逻辑,也就是,对于哪些方法的调用,不对其进行增强,而是执行对应的特定逻辑,从中可以了解,Spring AOP 对哪些方法是默认不进行增强的。
15 0
Spring 源码阅读 61:基于 JDK 动态代理的 AOP 代理回调方法 invoke 分析
本文分析了 JdkDynamicAopProxy 的invoke方法,invoke方法是基于 JDK 动态代理创建的 AOP 代理对象的方法处理回调逻辑,也是 Spring AOP 增强目标方法的关键逻辑。
71 0
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十二)日志篇(1):rocketmq+ aop +自定义注解 实现入参出参日志收集记录 完整源码
从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(十二)日志篇(1):rocketmq+ aop +自定义注解 实现入参出参日志收集记录 完整源码
30 0
Spring的AOP切面编程
Spring的AOP切面编程
14 0
Spring源码分析之AOP从解析到调用(三)
Spring源码分析之AOP从解析到调用
24 0
Spring源码分析之AOP从解析到调用(二)
Spring源码分析之AOP从解析到调用
30 0
Spring源码分析之AOP从解析到调用(一)
Spring源码分析之AOP从解析到调用
25 0
Spring——Aop面向切面编程(二)
Spring——Aop面向切面编程
28 0
Spring——Aop面向切面编程(一)
Spring——Aop面向切面编程
18 0
Spring AOP【统一异常处理与统一数据格式封装】
Spring AOP【统一异常处理与统一数据格式封装】
41 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
电商网站需求分析和架构设计Spring Boot2.6入门
立即下载
云上Docker的Spring Cloud微服务应用实践分享
立即下载
Spring Boot 2.6.0电商网站开发实战
立即下载
相关实验场景
更多