AOP
Advice: action taken by an aspect at a particular join point. Different types of advice include "around,"
"before" and "after" advice. (Advice types are discussed below.) Many AOP frameworks, including
Spring, model an advice as an interceptor, maintaining a chain of interceptors around the join point.
Advice types in Spring:
Interception around advice-->org.aopalliance.intercept.MethodInterceptor
Before advice-->MethodBeforeAdvice
Throws advice-->ThrowsAdvice
After Returning advice-->AfterReturningAdvice
Introduction advice-->IntroductionInterceptor extends MethodInterceptor
Advice---wrapped--->Advisor[.getAdvice]
IntroductionAdvisor[DefaultIntroductionAdvisor , IntroductionInfo] PointcutAdvisor[DefaultPointcutAdvisor]
Note the advisor and the interceptor[Advice] order in the chain !
Customize your specific Advisor/Advice[BeanDefinition.ROLE_APPLICATION] not AutoProxyCreator !
Extends------>DefaultPointcutAdvisor[Pointcut-filtering , Advice-MethodInterceptor]
e.g:BeanFactoryTransactionAttributeSourceAdvisor:
Pointcut--matches-->AnnotationTransactionAttributeSource:
AbstractFallbackTransactionAttributeSource how to get @Transactinal attributes.
TransactionInterceptor:MethodInterceptor--invoke-->how to get actual targetClass.
ProxyFactory factory = new ProxyFactory(myBusinessInterfaceImpl);
factory.addAdvice(myMethodInterceptor);
factory.addAdvisor(myAdvisor);
MyBusinessInterface tb = (MyBusinessInterface) factory.getProxy();
<aop:config>
<aop:aspectj-autoproxy />
当使用<aop:config>配置时自动注册AspectJAwareAdvisorAutoProxyCreator,
而使用<aop:aspectj-autoproxy>时会自动注册AnnotationAwareAspectJAutoProxyCreator。
Spring 3.2.13 Transactions:
http://www.springframework.org/schema/tx/spring-tx.xsd
<!--default order Integer.MAX_VALUE:2147483647 order="2147483646" BeanFactoryTransactionAttributeSourceAdvisor-->
<tx:annotation-driven/>
AnnotationDrivenBeanDefinitionParser-->parse-->AopNamespaceUtils.registerAutoProxyCreatorIfNecessary-->AopConfigUtils.registerAutoProxyCreatorIfNecessary-->
InfrastructureAdvisorAutoProxyCreator<------AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean scanning container mgmt beans and findEligibleAdvisors include BeanFactoryTransactionAttributeSourceAdvisor
+
@Configuration
ProxyTransactionManagementConfiguration-->BeanFactoryTransactionAttributeSourceAdvisor-->
TransactionInterceptor<--TransactionAttributeSource
TransactionProxyFactoryBean<--setTransactionAttributeSource
AnnotationDrivenBeanDefinitionParser.AopAutoProxyConfigurer how to build BeanFactoryTransactionAttributeSourceAdvisor BeanDefinition.ROLE_INFRASTRUCTURE[filtering]
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(X.class);
GenericBeanDefinition definition = (GenericBeanDefinition) builder.getRawBeanDefinition();
definition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) AC;
DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getBeanFactory();
defaultListableBeanFactory.registerBeanDefinition("x", definition);
For dynamically registered beans, if you want AOP to affect them, they must be registered through the BeanPostProcessor.
TransactionInterceptor extends TransactionAspectSupport.invokeWithinTransaction-->PlatformTransactionManager around[ getTransaction, commit, rollback ]
AnnotationTransactionAttributeSource-->getTransactionAttribute/TransactionDefinition
TransactionStatus getTransaction(TransactionDefinition:TransactionAttribute definition)
if (isExistingTransaction(transaction)) {
return handleExistingTransaction(definition, transaction, debugEnabled)-->
//for PROPAGATION_SUPPORTS or PROPAGATION_REQUIRED
DefaultTransactionStatus:isNewTransaction(false)&isNewSynchronization-->
actualNewSynchronization-->!TransactionSynchronizationManager.isSynchronizationActive()-->(local synchronizations.get() != null)
}
//else
DefaultTransactionStatus:isNewTransaction&isNewSynchronization-->true/false:-->PROPAGATION_*
if TransactionStatus.isNewSynchronization()-->TransactionSynchronization called on commit.
TransactionSynchronization.
[suspend,resume,beforeCommit/Completion,afterCommit/Completion,flush,STATUS_COMMITTED/ROLLED_BACK/UNKNOWN]
TransactionSynchronizationManager.registerSynchronization(TransactionSynchronization)
if DataSourceTransactionManager around , similarly refer to org.springframework.jdbc.datasource.DataSourceUtils.ConnectionSynchronization
1.org.mybatis.spring.SqlSessionUtils.SqlSessionSynchronization
commit(TransactionStatus status)
if TransactionStatus.isNewSynchronization()-->TransactionSynchronization
if TransactionStatus.isNewTransaction()-->doCommit
@Configuration -->
@ImportResource
org.springframework.config.java.context.JavaConfigApplicationContext
<dependency>
<groupId>org.springframework.javaconfig</groupId>
<artifactId>spring-javaconfig</artifactId>
</dependency>
获取Spring动态代理目标对象(不是单独使用JDK Proxy/CGLIB生成的)
ref-->http://jinnianshilongnian.iteye.com/blog/1613222
相关推荐
spring aop jar 包
描述一下Spring AOP? 在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同? AOP有哪些可用的实现? Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介...
spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
一、适合人群 1、具备一定Java编程基础,初级开发者 2、对springboot,mybatis,mysql有基本认识 3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 ...4、spring boot,mybatis,druid,spring aop的使用
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序
java-aop&jdbcTempalte
springaop依赖的jar包,spring版本2.5.6,如果需要,可以下载使用,欢迎各位评论指出不足
Spring框架的关键组件之一是面向方面编程(AOP)框架。 面向方面的编程需要将程序逻辑分解成不同的部分。 此教程将通过简单实用的方法来学习Spring框架提供的AOP/面向方面编程。
AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析-SpringAOP中定义的类图AOP流程源码分析...
spring aop切面拦截指定类和方法实现流程日志跟踪 一般情况下,在不侵入业务代码的情况下,需要做流程日志跟踪是比较合理的 采用springaop切面思想
spring aop的demo spring aop的demo
Spring AOP 几个不同使用方法的完整例子,使用Junit4c测试, 在我的博客上有不同配置组合的说明,可以参考
AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理
NULL 博文链接:https://306963591.iteye.com/blog/1129837
springAOP所需jar包 springAOP所需jar包 springAOP所需jar包 springAOP所需jar包 springAOP所需jar包
Spring源码最难问题:当Spring AOP遇上循环依赖.docx
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
Spring aop Spring aop