- 浏览: 47803 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (64)
- codes (9)
- javascript (4)
- servicemix (2)
- maven (2)
- webservice (1)
- docker (1)
- spring (25)
- git (1)
- css (3)
- hadoop (1)
- osgi (2)
- data (3)
- java (6)
- develop (5)
- tomcat (2)
- jvm (1)
- exceptions (3)
- company (0)
- utils (0)
- poi (3)
- 2018 (0)
- notepad (0)
- jquery (1)
- subject (0)
- 行业背景 (0)
- 2019 (0)
- https://blog.csdn.net/u012364631/article/details/47682011 (0)
- idea (0)
最新评论
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 480AbstractAutowireCapableBeanFact ... -
spring容器
2019-07-14 08:47 282private final ServletContainer ... -
spring容器
2019-07-13 23:35 0spring容器与springmvc容器 73 ... -
spring源码学习系列2.6-spring ioc原理-codes
2019-03-05 22:56 455web.xml <listener> < ... -
spring源码学习系列3.4-spring mvc原理-codes
2019-01-21 22:46 265本篇章从核心类角度解读springmvc的原理 web.xm ... -
spring源码学习系列4.2-spring aop原理-codes
2018-12-04 22:29 540jdk: Proxy InvocationHandler ... -
spring源码学习系列4.1-spring实现对ibatis的事务管理
2018-09-17 15:44 527事务由spring管理,可以理解为由spring管理数据库连接 ... -
spring源码学习系列1.2-spring事务代理深入分析2
2018-05-27 19:46 418提示: BeanPostProcessor AopUtils ... -
spring源码学习系列2.5-ApplicationContext初始化-设计模式
2018-05-08 15:17 468ApplicationContext容器的初始化可以通过模板方 ... -
spring源码学习系列3.3-DispatcherServlet初始化-设计模式
2018-05-07 11:12 555springmvc的核心是DispatcherServlet ... -
封装spring-security
2018-01-23 19:33 488github地址: https://github.com/ne ... -
eclipse导入spring源码
2018-05-12 07:20 940spring在git上的项目时gradle管理jar包的,所以 ... -
spring源码学习系列3.2.3-异常页面拦截机制
2017-07-29 19:07 711前序:本文的意义在于了解 tomcat处理异常 请求访问 ... -
spring源码学习系列3.2.2-How to bind String to Date
2017-07-17 12:40 565springmvc开发中,经常需将界面日期数据(String) ... -
spring源码学习系列3.2.1-command对象的绑定
2017-05-28 12:00 918在<spring源码学习系列3.2-handlerAda ... -
spring源码学习系列3.2-handlerAdapter执行
2017-05-28 12:01 382DispatcherServlet#doDispatch中调用 ... -
spring源码学习系列3.1-handlerMapping初始化
2017-05-28 11:56 673SimpleUrlHandlerMapping的继承体系 or ... -
spring源码学习系列2.4-finishRefresh会做什么
2017-05-06 16:36 537spring容器初始化完成后,调用finishRresh 该 ... -
spring源码学习系列3-springmvc原理
2017-05-28 11:56 421问题: springmvc是如何控 ... -
spring源码学习系列2-容器初始化入口-refresh
2017-04-23 21:33 446context=XmlWebApplicationContex ...
相关推荐
Spring源码缺失的spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar
Spring 源码分析文档----自用。
Spring Ioc源码分析系列--自动注入循环依赖的处理.doc
spring源码编译之后,各个项目可能缺失jar包 spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.5.1.jar
Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。 阅读源码好处: 了解其整体架构与核心概念以便建立Spring的...
spring源码缺失jar。spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar
spring源码spring-framework-4.3.2.RELEASE
Spring Ioc源码分析系列--@Autowired注解的实现原理.doc
Spring源码编译缺少的两个包:spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.2.jar
spring源码导入SpringObjenesis类报错解决,缺少jar包spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.1.jar
官方源码 spring-framework-5.3.4.zip官方源码 spring-framework-5.3.4.zip
spring-data-redis-1.8.1.RELEASE-sources.jar(spring-data-redis-1.8.1.RELEASE-sources.jar()
spring4源码所需要的spring-objenesis-repack-2.1.jar,spring-cglib-repack-3.1.jar
spring4.0源码编译时缺失的两个jar包,spring-cglib-repack-3.1.jar,spring-objenesis-repack-2.1.jar
Spring源代码解析(七):Spring AOP中对拦截器调用的实现 Spring源代码解析(八):Spring驱动Hibernate的实现 Spring源代码解析(九):Spring Acegi框架鉴权的实现 Spring源代码解析(十):Spring Acegi框架授权...
springframework 是sping 里面的一个开源框架,主要用户javaee的企业开发。Spring是什么呢?首先它是一个开源的项目,而且非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须...
Spring源码导入Eclipse缺失Jar包spring-asm-repack-5.0.4+spring-cglib-repack-3.1
Spring1.0,2003-08-30
spring-framework-4.2.5.RELEASE,spring4.2.5版源码。
Spring Boot源码(spring-boot-2.6.2.zip) Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可以“直接运行”这些应用程序。