`
bingo6001
  • 浏览: 10524 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

spring AOP精解

阅读更多

概要介绍:
spring aop是使用自己实现的动态代理来完成AOP的,有jdk动态代理,也有cglib。之所以引用了aspectj,主要是使用了其中的注解,并未用到其核心功能。

 

核心代码:

AbstractAutoProxyCreator.postProcessBeforeInstantiation()#267

Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(beanClass, beanName, targetSource);
Object proxy = createProxy(beanClass, beanName, specificInterceptors, targetSource);

 getAdvicesAndAdvisorsForBean是去找到使用了拦截配置的bean,核心代码如下:

BeanFactoryAspectJAdvisorsBuilder.buildAspectJAdvisors()#104

 

if (this.advisorFactory.isAspect(beanType))

 判断是不是使用了@Aspect注解

再对所有拦截器进行排序

if (!eligibleAdvisors.isEmpty()) {
	eligibleAdvisors = sortAdvisors(eligibleAdvisors);
}

 至此查找所有aop拦截器的过程完成,接下来就是下一行createProxy,核心代码如下:

proxyFactory.getProxy(getProxyClassLoader());

 很简单,就是在类加载时去创建代理类,可以从源码中看到只有两种实现:

CglibAopProxy(ObjenesisCglibAopProxy)、JdkDynamicAopProxy。

 


大体流程:
SPRING 通过注解实现AOP的过程的文字描述 - xml配置文件中声明自动发现注解(),spring默认启动时会注册注解解析器(AspectJAutoProxyBeanDefinitionParser),在注解解析器解析(parse)的过程中,会注册一个实现了BeanPostProcessor的后处理器(AspectJAwareAdvisorAutoProxyCreator),这个后处理器在目标对象实例化后进行拦截处理,拦截的流程是,先搜索所有已经注册的BeanDefiniton,从中找到标记了注解(@Aspect)的切面组成拦截器链,选择那些可以应用到目标对象的拦截器(过滤),如果拦截器链不为空,则为目标对象生成代理(JdkDynamicAopProxy或CglibAopProxy),当调用目标对象的指定拦截方法时,就会默认调用对应代理类的代理方法(invoke),这样就完成了AOP的整个流程。
------------------------------------------------------
原文:https://blog.csdn.net/c_unclezhang/article/details/78769426

参考:
【Spring源码分析-深入浅出AOP(图文分析)】
https://blog.csdn.net/c_unclezhang/article/details/78769426

PS:详细,相当详细
【AspectJ用法分析】
https://blog.mythsman.com/2017/12/21/1/

PS:重点讲了aspectj,便于对AOP有个整体的认识。
【spring AOP的实现原理】
https://www.cnblogs.com/CHENJIAO120/p/7080790.html

 

分享到:
评论

相关推荐

    《精通Spring2.X企业应用开发详解》20-23

    Spring容器高级主题 第6章 Spring AOP基础 第7章 基于@AspectJ和Schema的 第7章 AOP 第3篇 数据库访问 第8章 Spring对DAO的支持 第9章 Spring的事务管理 第10章 使用Spring JDBC访问数据库 ...

    项目实践精解:基于Struts-Spring-Hibernate的Java应用开发

    其次,Spring框架是一个全面的后端解决方案,它不仅仅是一个MVC框架,还是一个依赖注入(DI)和面向切面编程(AOP)的容器。Spring的核心是IoC(Inversion of Control),它允许开发者通过配置文件或注解来控制对象...

    spring学习手册 包括事务讲解

    3. Spring AOP:提供面向切面编程支持,用于处理横切关注点。 4. Spring ORM:支持对象关系映射,包括对Hibernate和JDBC的封装。 5. Spring Web:提供了基于Spring的Web应用容器。 6. Spring Web MVC:提供了一套...

    精通spring2.x企业应用开发详解

    Spring的AOP模块提供了实现面向切面编程的能力。这一章会介绍如何定义和应用切面,包括通知(advises)、切点(pointcuts)以及如何利用AOP进行事务管理,提高代码的复用性和可维护性。 3. **Chapter 12:Spring ...

    Java 集成开发实例精解源码

    例如,Spring框架是Java集成开发中常用的工具,它提供了全面的企业应用开发解决方案,包括依赖注入、AOP(面向切面编程)、数据访问、事务管理等。 在这个压缩包中,可能包含的子文件可能涵盖以下几个方面: 1. **...

    Java 集成开发实例精解

    4. **Spring框架**:Spring是Java企业级应用开发的重要框架,涵盖了IoC(控制反转)、AOP(面向切面编程)、数据访问、Web应用以及Spring Boot和Spring Cloud等子项目,是Java集成开发中的核心部分。 5. **数据库...

    SSH_精典教材与实例精解_一共8本书

    Spring是一个强大的Java企业级应用开发框架,以其依赖注入(DI)和面向切面编程(AOP)闻名。这两份文档可能详细介绍了Spring的IoC容器、数据访问、事务管理、MVC模块等内容,是学习Spring的绝佳起点。 `深入浅出...

    JSP软件工程桉例精解

    在软件工程实践中,JSP通常与其他框架结合使用,如Spring MVC和Struts,这些框架提供了更高级的功能,如依赖注入、AOP(面向切面编程)和异常处理。书中可能也会讨论如何将JSP与这些框架集成,以提高开发效率和代码...

    Java 集成开发实例精解 Sour code

    7. **Spring框架**:Spring是Java开发中最常用的框架之一,它提供依赖注入、AOP(面向切面编程)、事务管理等功能,极大地简化了企业级应用的开发。 8. **MVC模式**:Model-View-Controller模式是Web应用开发的经典...

    PHEI Broadview 2007专业书目 第一期24

    Spring是一个全面的后端框架,包含《Spring 技术手册》和《Spring 专业开发指南》,用于学习依赖注入、AOP等。Hibernate是对象关系映射(ORM)工具,有《精通 Hibernate》和《深入浅出 Hibernate》等书籍,帮助...

Global site tag (gtag.js) - Google Analytics