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 

相关文章
|
1月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
8天前
|
Java 数据库连接 数据库
Spring基础3——AOP,事务管理
AOP简介、入门案例、工作流程、切入点表达式、环绕通知、通知获取参数或返回值或异常、事务管理
Spring基础3——AOP,事务管理
|
1月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
1月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
21天前
|
缓存 Java 开发者
Spring高手之路22——AOP切面类的封装与解析
本篇文章深入解析了Spring AOP的工作机制,包括Advisor和TargetSource的构建与作用。通过详尽的源码分析和实际案例,帮助开发者全面理解AOP的核心技术,提升在实际项目中的应用能力。
19 0
Spring高手之路22——AOP切面类的封装与解析
|
20天前
|
Java Spring XML
掌握面向切面编程的秘密武器:Spring AOP 让你的代码优雅转身,横切关注点再也不是难题!
【8月更文挑战第31天】面向切面编程(AOP)通过切面封装横切关注点,如日志记录、事务管理等,使业务逻辑更清晰。Spring AOP提供强大工具,无需在业务代码中硬编码这些功能。本文将深入探讨Spring AOP的概念、工作原理及实际应用,展示如何通过基于注解的配置创建切面,优化代码结构并提高可维护性。通过示例说明如何定义切面类、通知方法及其应用时机,实现方法调用前后的日志记录,展示AOP在分离关注点和添加新功能方面的优势。
30 0
|
20天前
|
缓存 Java Spring
Spring缓存实践指南:从入门到精通的全方位攻略!
【8月更文挑战第31天】在现代Web应用开发中,性能优化至关重要。Spring框架提供的缓存机制可以帮助开发者轻松实现数据缓存,提升应用响应速度并减少服务器负载。通过简单的配置和注解,如`@Cacheable`、`@CachePut`和`@CacheEvict`,可以将缓存功能无缝集成到Spring应用中。例如,在配置文件中启用缓存支持并通过`@Cacheable`注解标记方法即可实现缓存。此外,合理设计缓存策略也很重要,需考虑数据变动频率及缓存大小等因素。总之,Spring缓存机制为提升应用性能提供了一种简便快捷的方式。
27 0
|
23天前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
54 0
|
29天前
|
缓存 安全 Java
Spring AOP 中两种代理类型的限制
【8月更文挑战第22天】
14 0
|
29天前
|
Java Spring