- 浏览: 50334 次
- 性别:
- 来自: 南京
文章分类
最新评论
3种自动代理器是
AnnotationAwareAspectJAutoProxyCreator-<aop:aspectj-autoproxy />
AbstractAdvisorAutoProxyCreator-<aop:config>
InfrastructureAdvisorAutoProxyCreator-<tx:annotation-driven/>
他们在Spring中注册的beanName都是
它们的优先级从上到下,即3者都配置了,默认注册AnnotationAwareAspectJAutoProxyCreator。那<tx:annotation-driven/>如何解析呢
<aop:aspectj-autoproxy /> - AopNamespaceHandler
该配置就是定义了一个AnnotationAwareAspectJAutoProxyCreator(BeanPostProcessor)的bean
InstantiationModelAwarePointcutAdvisor
AspectJExpressionPointcut
AspectJMethodBeforeAdvice,AspectJAfterAdvice,AspectJAfterReturningAdvice,AspectJAfterThrowingAdvice,AspectJAroundAdvice
该<aop>配置,不会定义Advisor,定义Advisor是在后置处理器(AnnotationAwareAspectJAutoProxyCreator)生成代理时动态创建的
AnnotationAwareAspectJAutoProxyCreator#findCandidateAdvisors
this.aspectJAdvisorsBuilder.buildAspectJAdvisors()生成InstantiationModelAwarePointcutAdvisor,表示注解或Apect类型的切面。
相关切面元素:
AspectJExpressionPointcut
(ReflectiveAspectJAdvisorFactory#getPointcut)
AspectJMethodBeforeAdvice,AspectJAfterAdvice,AspectJAfterReturningAdvice,AspectJAfterThrowingAdvice,AspectJAroundAdvice
(ReflectiveAspectJAdvisorFactory#getAdvice)
this.aspectJAdvisorsBuilder.buildAspectJAdvisors()具体如何设计实现注解的切面这里不做扩展,感兴趣的可以通过代码查看
<aop:config/> - AopNamespaceHandler
spring中的该配置实际上就是注册了几个beanDefinition
AspectJAwareAdvisorAutoProxyCreator -BeanPostProcessor
AspectJExpressionPointcut - Pointcut
DefaultBeanFactoryPointcutAdvisor - Advisor
至于怎么实现解析注册的,感兴趣的可查看源码
ConfigBeanDefinitionParser#parse
<tx:annotation-driven transaction-manager="transactionManager" /> - TxNamespaceHandler
spring中的该配置实际上就是注册了几个beanDefinition
InfrastructureAdvisorAutoProxyCreator
TransactionAttributeSourcePointcut Pointcut
TransactionInterceptor - MethodInterceptor(advice)
TransactionAttributeSourceAdvisor - Advisor(持有advice,pointcut)
TransactionInterceptor主要是处理事务的增强,这里不对其扩展
TransactionInterceptor#invoke
参考:<spring源码学习系列1.2-spring事务代理深入分析2>
http://newjava-sina-cn.iteye.com/blog/2422939
AnnotationAwareAspectJAutoProxyCreator-<aop:aspectj-autoproxy />
AbstractAdvisorAutoProxyCreator-<aop:config>
InfrastructureAdvisorAutoProxyCreator-<tx:annotation-driven/>
他们在Spring中注册的beanName都是
public static final String AUTO_PROXY_CREATOR_BEAN_NAME = "org.springframework.aop.config.internalAutoProxyCreator"
它们的优先级从上到下,即3者都配置了,默认注册AnnotationAwareAspectJAutoProxyCreator。那<tx:annotation-driven/>如何解析呢
<aop:aspectj-autoproxy /> - AopNamespaceHandler
该配置就是定义了一个AnnotationAwareAspectJAutoProxyCreator(BeanPostProcessor)的bean
InstantiationModelAwarePointcutAdvisor
AspectJExpressionPointcut
AspectJMethodBeforeAdvice,AspectJAfterAdvice,AspectJAfterReturningAdvice,AspectJAfterThrowingAdvice,AspectJAroundAdvice
该<aop>配置,不会定义Advisor,定义Advisor是在后置处理器(AnnotationAwareAspectJAutoProxyCreator)生成代理时动态创建的
AnnotationAwareAspectJAutoProxyCreator#findCandidateAdvisors
@Override protected List<Advisor> findCandidateAdvisors() { // Add all the Spring advisors found according to superclass rules. List<Advisor> advisors = super.findCandidateAdvisors(); // Build Advisors for all AspectJ aspects in the bean factory. advisors.addAll(this.aspectJAdvisorsBuilder.buildAspectJAdvisors()); return advisors; }
this.aspectJAdvisorsBuilder.buildAspectJAdvisors()生成InstantiationModelAwarePointcutAdvisor,表示注解或Apect类型的切面。
相关切面元素:
AspectJExpressionPointcut
(ReflectiveAspectJAdvisorFactory#getPointcut)
AspectJMethodBeforeAdvice,AspectJAfterAdvice,AspectJAfterReturningAdvice,AspectJAfterThrowingAdvice,AspectJAroundAdvice
(ReflectiveAspectJAdvisorFactory#getAdvice)
this.aspectJAdvisorsBuilder.buildAspectJAdvisors()具体如何设计实现注解的切面这里不做扩展,感兴趣的可以通过代码查看
<aop:config/> - AopNamespaceHandler
spring中的该配置实际上就是注册了几个beanDefinition
AspectJAwareAdvisorAutoProxyCreator -BeanPostProcessor
AspectJExpressionPointcut - Pointcut
DefaultBeanFactoryPointcutAdvisor - Advisor
至于怎么实现解析注册的,感兴趣的可查看源码
ConfigBeanDefinitionParser#parse
public BeanDefinition parse(Element element, ParserContext parserContext) { CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(element.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); configureAutoProxyCreator(parserContext, element); List<Element> childElts = DomUtils.getChildElements(element); for (Element elt: childElts) { String localName = parserContext.getDelegate().getLocalName(elt); if (POINTCUT.equals(localName)) { parsePointcut(elt, parserContext); } else if (ADVISOR.equals(localName)) { parseAdvisor(elt, parserContext); } else if (ASPECT.equals(localName)) { parseAspect(elt, parserContext); } } parserContext.popAndRegisterContainingComponent(); return null; }
<tx:annotation-driven transaction-manager="transactionManager" /> - TxNamespaceHandler
spring中的该配置实际上就是注册了几个beanDefinition
InfrastructureAdvisorAutoProxyCreator
TransactionAttributeSourcePointcut Pointcut
TransactionInterceptor - MethodInterceptor(advice)
TransactionAttributeSourceAdvisor - Advisor(持有advice,pointcut)
TransactionInterceptor主要是处理事务的增强,这里不对其扩展
TransactionInterceptor#invoke
public Object invoke(final MethodInvocation invocation) throws Throwable { // Work out the target class: may be {@code null}. // The TransactionAttributeSource should be passed the target class // as well as the method, which may be from an interface. Class<?> targetClass = (invocation.getThis() != null ? AopUtils.getTargetClass(invocation.getThis()) : null); // Adapt to TransactionAspectSupport's invokeWithinTransaction... return invokeWithinTransaction(invocation.getMethod(), targetClass, new InvocationCallback() { public Object proceedWithInvocation() throws Throwable { return invocation.proceed(); } }); }
参考:<spring源码学习系列1.2-spring事务代理深入分析2>
http://newjava-sina-cn.iteye.com/blog/2422939
发表评论
-
spring疑难解惑-循环依赖的解决
2020-06-17 23:27 538AbstractAutowireCapableBeanFact ... -
spring容器
2019-07-14 08:47 305private final ServletContainer ... -
spring容器
2019-07-13 23:35 0spring容器与springmvc容器 73 ... -
spring源码学习系列2.6-spring ioc原理-codes
2019-03-05 22:56 487web.xml <listener> < ... -
spring源码学习系列3.4-spring mvc原理-codes
2019-01-21 22:46 296本篇章从核心类角度解读springmvc的原理 web.xm ... -
spring源码学习系列4.2-spring aop原理-codes
2018-12-04 22:29 561jdk: Proxy InvocationHandler ... -
spring源码学习系列4.1-spring实现对ibatis的事务管理
2018-09-17 15:44 578事务由spring管理,可以理解为由spring管理数据库连接 ... -
spring源码学习系列1.2-spring事务代理深入分析2
2018-05-27 19:46 451提示: BeanPostProcessor AopUtils ... -
spring源码学习系列2.5-ApplicationContext初始化-设计模式
2018-05-08 15:17 519ApplicationContext容器的初始化可以通过模板方 ... -
spring源码学习系列3.3-DispatcherServlet初始化-设计模式
2018-05-07 11:12 622springmvc的核心是DispatcherServlet ... -
封装spring-security
2018-01-23 19:33 518github地址: https://github.com/ne ... -
eclipse导入spring源码
2018-05-12 07:20 980spring在git上的项目时gradle管理jar包的,所以 ... -
spring源码学习系列3.2.3-异常页面拦截机制
2017-07-29 19:07 766前序:本文的意义在于了解 tomcat处理异常 请求访问 ... -
spring源码学习系列3.2.2-How to bind String to Date
2017-07-17 12:40 596springmvc开发中,经常需将界面日期数据(String) ... -
spring源码学习系列3.2.1-command对象的绑定
2017-05-28 12:00 981在<spring源码学习系列3.2-handlerAda ... -
spring源码学习系列3.2-handlerAdapter执行
2017-05-28 12:01 409DispatcherServlet#doDispatch中调用 ... -
spring源码学习系列3.1-handlerMapping初始化
2017-05-28 11:56 701SimpleUrlHandlerMapping的继承体系 or ... -
spring源码学习系列2.4-finishRefresh会做什么
2017-05-06 16:36 578spring容器初始化完成后,调用finishRresh 该 ... -
spring源码学习系列3-springmvc原理
2017-05-28 11:56 456问题: springmvc是如何控 ... -
spring源码学习系列2-容器初始化入口-refresh
2017-04-23 21:33 477context=XmlWebApplicationContex ...
相关推荐
通过对`spring-beans`源码的深入学习,我们可以更好地理解Spring的工作机制,从而更高效地利用这一强大框架。这有助于我们编写出更加灵活、可维护的代码,提升项目的整体质量。在实际开发中,理解并掌握这些知识点将...
Spring框架是Java开发中最广泛应用的轻量级...通过对Spring源码的学习,开发者可以更加熟练地运用Spring框架,设计出更加高效、可维护的系统。同时,这也为自定义扩展或优化Spring提供了可能,以满足特定项目的需求。
通过深入学习Spring源码,我们可以了解到设计模式的运用,例如工厂模式、代理模式、装饰者模式等,以及如何利用反射、动态代理等Java核心技术实现IoC和AOP。此外,源码中还包括了对Spring Boot、Spring MVC等模块的...
通过"spring源码解析"的学习,开发者可以更好地理解和利用Spring框架,提升开发效率,同时也能为后续的框架设计与优化提供理论基础。这份资料将涵盖上述众多主题,旨在通过源码层面的解析,使读者对Spring有更深层次...
### Java毕业设计&课设——Spring源码深度解析+注解开发全套视频教程知识点概览 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一款开源轻量级Java EE应用框架,旨在简化企业级应用的开发过程。Spring...
这个"spring学习笔记,包括源码学习"的资料很可能包含了一系列关于Spring框架的核心概念、配置、使用方法以及深入源码的解析。 首先,让我们来了解一下Spring框架的基础知识。Spring的核心特性是依赖注入,它允许...
《Spring Framework 4.2.3.RELEASE 源码深度解析》 Spring Framework作为Java领域最广泛应用的轻量级框架之一,其4.2.3.RELEASE版本...通过源码学习,我们不仅能掌握Spring的使用,更能提升自己的编程思维和设计能力。
要研究Spring源码,你需要对Java语言、设计模式、反射和动态代理有深入理解。Gradle的使用则需要了解其基本语法和插件系统。在阅读源码的过程中,可以从核心接口和实现类入手,例如ApplicationContext接口及其实现,...
在这个“狂神说”系列的Spring源码总结中,我们可以深入理解Spring的核心概念和实现机制。 1. **依赖注入(DI)与控制反转(IoC)**:Spring的核心特性是依赖注入,它通过反转应用程序对对象的控制权,使得对象的创建和...
Spring框架是Java开发中最常用的轻量级开源框架之一,它为构建企业级应用程序提供了全面的编程和配置模型。Spring5源码分析笔记旨在深入理解Spring的工作原理,帮助开发者提升技能,优化代码,以及更好地利用其核心...
1. **Spring Boot**:了解Spring Boot的启动机制、自动配置原理,以及如何创建和配置自定义的 Starter。 2. **分布式系统设计**:学习如何设计分布式锁,防止秒杀过程中的重复下单问题,以及如何通过消息队列实现...
《Spring源码分析——BeanFactory》 在Java的IoC(Inversion of Control)和DI(Dependency Injection)领域,Spring框架扮演着至关重要的角色。BeanFactory是Spring的核心组件之一,它是容器的基石,负责管理应用...
4. **Transaction Management**:MyBatis-Spring与Spring的事务管理器配合,可以实现声明式事务管理。只需在Spring配置中定义一个PlatformTransactionManager,MyBatis-Spring就会自动将事务管理应用到所有数据库...
标题中的“spring源码关键地方”指的是一项关于Spring框架核心源码的深入解析。Spring是Java企业级应用开发中最常用的框架之一,它的源码分析对于开发者来说具有极高的学习价值,可以帮助理解其工作原理,提升开发...
Spring框架是Java开发中最常用的轻量级框架之一,它提供了依赖注入、面向切面编程(AOP)、数据访问、Web支持等多种功能。本资源提供了一个Spring的源码工程,允许开发者进行断点调试,这对于理解Spring的工作原理和...
Spring MVC作为Spring的Web组件,提供了模型-视图-控制器架构,允许开发者创建高性能的Web应用。Spring4支持了JSR356(Java API for WebSocket),使得实时通信成为可能,为开发富交互的Web应用提供了基础。 另外,...
通过对Spring源码的分析,我们可以学习到设计模式的应用,例如工厂模式、单例模式、代理模式等;了解依赖注入的实现原理;掌握AOP的底层机制;并能洞察Spring如何优雅地处理并发和异常。这些知识对于提升我们的编程...
通过深入学习Spring源码,开发者可以更好地理解其工作原理,提升问题排查和性能优化能力。在阅读源码时,建议结合方法调用流程图,以便于追踪代码执行路径,理解各组件间的协作。同时,实践是检验理论的最好方式,...
声明式事务管理更常用,通过在方法上添加`@Transactional`注解,Spring会自动处理事务的开启、提交、回滚等操作。编程式事务管理则需要手动调用`TransactionTemplate`或`PlatformTransactionManager`进行事务控制。 ...