日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring-framework应用程序启动loadtime源码分析笔记(二)——@Transactional

發布時間:2023/12/1 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring-framework应用程序启动loadtime源码分析笔记(二)——@Transactional 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
@Transactional標識類或方法,使方法被執行時使用事務方式執行,這里只討論PROXY方法增強方法。使用@EnableTransactionManagement,默認model=AdviceMode.PROXY,通過@Import(TransactionManagementConfigurationSelector.class)來判斷在加載時注冊PROXY不是ASPECTJ相關類。PROXY相關類有AutoProxyRegistrar和ProxyTransactionManagementConfiguration。AutoProxyRegistrar作用是通過EnableTransactionManagement.proxyTargetClass值判斷使用CGLIB或是Java?interface-based?proxies。使用Java?interface-based?proxies時AnnotationAwareAspectJAutoProxyCreator,AnnotationAwareAspectJAutoProxyCreator是一個BeanPostProcessor實現類。使用CGLIB也是注冊AnnotationAwareAspectJAutoProxyCreator并且將proxyTargetClass=true,如下AopConfigUtils.forceAutoProxyCreatorToUseClassProxying()

AnnotationAwareAspectJAutoProxyCreator.wrapIfNecessary()

AnnotationAwareAspectJAutoProxyCreator是一個BeanPostProcessor實現類,它的相應方法會在容器管理每個對象實例化不同階段會執行。wrapIfNecessary()方法在postProcessAfterInitialization()方法調用,主要是判斷實例化對象是否容器所有Advisor所要作用對象,如@Transactional標識的方法或類的對象匹配BeanFactoryTransactionAttributeSourceAdvisor。 AnnotationTransactionAttributeSource.determineTransactionAttribute() 判斷傳入的方法是否含@Transactional標識,返回TransactionAttribute 下面是AnnotationAwareAspectJAutoProxyCreator(AbstractAutoProxyCreator).wrapIfNecessary()的stack Thread?[main]?(Suspended?(breakpoint?at?line?348?in?AbstractAutoProxyCreator))???? owns:?ConcurrentHashMap<K,V>??(id=2343)???? owns:?Object??(id=2107)???? AnnotationAwareAspectJAutoProxyCreator(AbstractAutoProxyCreator).wrapIfNecessary(Object,?String,?Object)?line:?348???? AnnotationAwareAspectJAutoProxyCreator(AbstractAutoProxyCreator).postProcessAfterInitialization(Object,?String)?line:?298???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyBeanPostProcessorsAfterInitialization(Object,?String)?line:?435???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).initializeBean(String,?Object,?RootBeanDefinition)?line:?1721???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,?RootBeanDefinition,?Object[])?line:?581???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,?RootBeanDefinition,?Object[])?line:?498???? DefaultListableBeanFactory(AbstractBeanFactory).lambda$doGetBean$0(String,?RootBeanDefinition,?Object[])?line:?305???? 48361312.getObject()?line:?not?available???? DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,?ObjectFactory<?>)?line:?233???? DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,?Class<T>,?Object[],?boolean)?line:?303???? DefaultListableBeanFactory(AbstractBeanFactory).getBean(String,?Class<T>)?line:?198???? CommonAnnotationBeanPostProcessor.autowireResource(BeanFactory,?CommonAnnotationBeanPostProcessor$LookupElement,?String)?line:?512???? CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor$LookupElement,?String)?line:?483???? CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(Object,?String)?line:?617???? CommonAnnotationBeanPostProcessor$ResourceElement(InjectionMetadata$InjectedElement).inject(Object,?String,?PropertyValues)?line:?172???? InjectionMetadata.inject(Object,?String,?PropertyValues)?line:?89???? CommonAnnotationBeanPostProcessor.postProcessPropertyValues(PropertyValues,?PropertyDescriptor[],?Object,?String)?line:?317???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).populateBean(String,?RootBeanDefinition,?BeanWrapper)?line:?1353???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,?RootBeanDefinition,?Object[])?line:?579???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,?RootBeanDefinition,?Object[])?line:?498???? DefaultListableBeanFactory(AbstractBeanFactory).lambda$doGetBean$0(String,?RootBeanDefinition,?Object[])?line:?305???? 48361312.getObject()?line:?not?available???? DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,?ObjectFactory<?>)?line:?233???? DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,?Class<T>,?Object[],?boolean)?line:?303???? DefaultListableBeanFactory(AbstractBeanFactory).getBean(String,?Class<T>)?line:?198???? CommonAnnotationBeanPostProcessor.autowireResource(BeanFactory,?CommonAnnotationBeanPostProcessor$LookupElement,?String)?line:?512???? CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor$LookupElement,?String)?line:?483???? CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(Object,?String)?line:?617???? CommonAnnotationBeanPostProcessor$ResourceElement(InjectionMetadata$InjectedElement).inject(Object,?String,?PropertyValues)?line:?172???? InjectionMetadata.inject(Object,?String,?PropertyValues)?line:?89???? CommonAnnotationBeanPostProcessor.postProcessPropertyValues(PropertyValues,?PropertyDescriptor[],?Object,?String)?line:?317???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).populateBean(String,?RootBeanDefinition,?BeanWrapper)?line:?1353???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,?RootBeanDefinition,?Object[])?line:?579???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,?RootBeanDefinition,?Object[])?line:?498???? DefaultListableBeanFactory(AbstractBeanFactory).lambda$doGetBean$0(String,?RootBeanDefinition,?Object[])?line:?305???? 48361312.getObject()?line:?not?available???? DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,?ObjectFactory<?>)?line:?233???? DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,?Class<T>,?Object[],?boolean)?line:?303???? DefaultListableBeanFactory(AbstractBeanFactory).getBean(String)?line:?193???? DefaultListableBeanFactory.preInstantiateSingletons()?line:?747???? AnnotationConfigApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory)?line:?861???? AnnotationConfigApplicationContext(AbstractApplicationContext).refresh()?line:?542???? SpringApplication.refresh(ApplicationContext)?line:?750???? SpringApplication.refreshContext(ConfigurableApplicationContext)?line:?386???? SpringApplication.run(String...)?line:?327???? SpringApplication.run(Class<?>[],?String[])?line:?1245???? SpringApplication.run(Class<?>,?String...)?line:?1233???? Application.main(String[])?line:?56???? 如果對象是Advisor所要作用對象,則調用createProxy()生成proxy對象封閉目標對象,增強目標對象。如下面stack Thread?[main]?(Suspended?(breakpoint?at?line?441?in?AbstractAutoProxyCreator))???? owns:?ConcurrentHashMap<K,V>??(id=2343)???? owns:?Object??(id=2107)???? AnnotationAwareAspectJAutoProxyCreator(AbstractAutoProxyCreator).createProxy(Class<?>,?String,?Object[],?TargetSource)?line:?441???? AnnotationAwareAspectJAutoProxyCreator(AbstractAutoProxyCreator).wrapIfNecessary(Object,?String,?Object)?line:?349???? AnnotationAwareAspectJAutoProxyCreator(AbstractAutoProxyCreator).postProcessAfterInitialization(Object,?String)?line:?298???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).applyBeanPostProcessorsAfterInitialization(Object,?String)?line:?435???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).initializeBean(String,?Object,?RootBeanDefinition)?line:?1721???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,?RootBeanDefinition,?Object[])?line:?581???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,?RootBeanDefinition,?Object[])?line:?498???? DefaultListableBeanFactory(AbstractBeanFactory).lambda$doGetBean$0(String,?RootBeanDefinition,?Object[])?line:?305???? 48361312.getObject()?line:?not?available???? DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,?ObjectFactory<?>)?line:?233???? DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,?Class<T>,?Object[],?boolean)?line:?303???? DefaultListableBeanFactory(AbstractBeanFactory).getBean(String,?Class<T>)?line:?198???? CommonAnnotationBeanPostProcessor.autowireResource(BeanFactory,?CommonAnnotationBeanPostProcessor$LookupElement,?String)?line:?512???? CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor$LookupElement,?String)?line:?483???? CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(Object,?String)?line:?617???? CommonAnnotationBeanPostProcessor$ResourceElement(InjectionMetadata$InjectedElement).inject(Object,?String,?PropertyValues)?line:?172???? InjectionMetadata.inject(Object,?String,?PropertyValues)?line:?89???? CommonAnnotationBeanPostProcessor.postProcessPropertyValues(PropertyValues,?PropertyDescriptor[],?Object,?String)?line:?317???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).populateBean(String,?RootBeanDefinition,?BeanWrapper)?line:?1353???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,?RootBeanDefinition,?Object[])?line:?579???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,?RootBeanDefinition,?Object[])?line:?498???? DefaultListableBeanFactory(AbstractBeanFactory).lambda$doGetBean$0(String,?RootBeanDefinition,?Object[])?line:?305???? 48361312.getObject()?line:?not?available???? DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,?ObjectFactory<?>)?line:?233???? DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,?Class<T>,?Object[],?boolean)?line:?303???? DefaultListableBeanFactory(AbstractBeanFactory).getBean(String,?Class<T>)?line:?198???? CommonAnnotationBeanPostProcessor.autowireResource(BeanFactory,?CommonAnnotationBeanPostProcessor$LookupElement,?String)?line:?512???? CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor$LookupElement,?String)?line:?483???? CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(Object,?String)?line:?617???? CommonAnnotationBeanPostProcessor$ResourceElement(InjectionMetadata$InjectedElement).inject(Object,?String,?PropertyValues)?line:?172???? InjectionMetadata.inject(Object,?String,?PropertyValues)?line:?89???? CommonAnnotationBeanPostProcessor.postProcessPropertyValues(PropertyValues,?PropertyDescriptor[],?Object,?String)?line:?317???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).populateBean(String,?RootBeanDefinition,?BeanWrapper)?line:?1353???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).doCreateBean(String,?RootBeanDefinition,?Object[])?line:?579???? DefaultListableBeanFactory(AbstractAutowireCapableBeanFactory).createBean(String,?RootBeanDefinition,?Object[])?line:?498???? DefaultListableBeanFactory(AbstractBeanFactory).lambda$doGetBean$0(String,?RootBeanDefinition,?Object[])?line:?305???? 48361312.getObject()?line:?not?available???? DefaultListableBeanFactory(DefaultSingletonBeanRegistry).getSingleton(String,?ObjectFactory<?>)?line:?233???? DefaultListableBeanFactory(AbstractBeanFactory).doGetBean(String,?Class<T>,?Object[],?boolean)?line:?303???? DefaultListableBeanFactory(AbstractBeanFactory).getBean(String)?line:?193???? DefaultListableBeanFactory.preInstantiateSingletons()?line:?747???? AnnotationConfigApplicationContext(AbstractApplicationContext).finishBeanFactoryInitialization(ConfigurableListableBeanFactory)?line:?861???? AnnotationConfigApplicationContext(AbstractApplicationContext).refresh()?line:?542???? SpringApplication.refresh(ApplicationContext)?line:?750???? SpringApplication.refreshContext(ConfigurableApplicationContext)?line:?386???? SpringApplication.run(String...)?line:?327???? SpringApplication.run(Class<?>[],?String[])?line:?1245???? SpringApplication.run(Class<?>,?String...)?line:?1233???? Application.main(String[])?line:?56????

AbstractAutoProxyCreator.createProxy()

DefaultAopProxyFactory.createAopProxy() @Transactional標識增強對象是類所以創建proxy對象是ObjenesisCglibAopProxy

轉載于:https://www.cnblogs.com/birdstudio/p/7639984.html

總結

以上是生活随笔為你收集整理的Spring-framework应用程序启动loadtime源码分析笔记(二)——@Transactional的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。