spring aop实现的过程
之前看过,再分析一次spring aop过程
org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory
org.springframework.beans.factory.support.DefaultListableBeanFactory
org.springframework.aop.framework.JdkDynamicAopProxy
org.springframework.aop.framework.CglibAopProxy
这两个都继承了AopProxy
org.springframework.aop.framework.DefaultAopProxyFactory 代理上面两个AopProxy
注意了: 此奶为spring容器初始化正在实例会单例bean的栈路径;
2016-06-02 13:12:26
"main" - Thread t@1
java.lang.Thread.State: RUNNABLE
at org.springframework.aop.framework.JdkDynamicAopProxy.<init>(JdkDynamicAopProxy.java:105)
at org.springframework.aop.framework.DefaultAopProxyFactory.createAopProxy(DefaultAopProxyFactory.java:65)
at org.springframework.aop.framework.ProxyCreatorSupport.createAopProxy(ProxyCreatorSupport.java:105)
- locked <3941f799> (a org.springframework.aop.framework.ProxyFactory)
at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:111)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:477)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:362)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1488)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
- locked <19e67b2d> (a java.util.concurrent.ConcurrentHashMap)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
- locked <6aa0d4a3> (a java.lang.Object)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.springapp.demo.SpringContainer.main(SpringContainer.java:29)
Locked ownable synchronizers:
- None
spring循环引用判断处:
"main" - Thread t@1
java.lang.Thread.State: RUNNABLE
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:255)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
- locked <101dd23e> (a java.lang.Object)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.springapp.demo.SpringContainer.main(SpringContainer.java:29)
Locked ownable synchronizers:
- None
判断是否依懒其他的引用:
"main" - Thread t@1
java.lang.Thread.State: RUNNABLE
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
- locked <101dd23e> (a java.lang.Object)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.springapp.demo.SpringContainer.main(SpringContainer.java:29)
Locked ownable synchronizers:
- None
查看所有的beanpostprocessor:
[org.springframework.context.support.ApplicationContextAwareProcessor@5bc8ab1e, //初始化AccessControlContext,与代码权限相关的东西相关
org.springframework.context.support.AbstractApplicationContext$BeanPostProcessorChecker@535a6da5, //打印初始化bean日志用
org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor@5d93302b, //处理import相关用
proxyTargetClass=false; optimize=false; opaque=false; exposeProxy=false; frozen=false,
// 这个是:class org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator,用于初始化自动切面注入的构造器
//AnnotationAwareAspectJAutoProxyCreator这个类中 , org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.isInfrastructureClass(Class)此处在(postProcessBeforeInstantiation阶段)过滤所有bean,哪一些是具备AOP拦接功能的bean,并把它们记录下来(记录在advisedBeans),以备在后面的postProcessAfterInstantiation阶段决定是否进行创建ProxyBean的替换
com.springapp.demo.aware.SimpleBeanPostProcessor@1242bced,
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor@b47af37, //用于支持JSR-250标注用
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor@70bb19ab, //用于自动注入用(包括JSR-330),识别Autowired.class & Value.class
org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor@f4049aa, //自动注入
org.springframework.context.support.AbstractApplicationContext$ApplicationListenerDetector@55d49663 //确定该bean是否增监听器ApplicationListener
]
"main" - Thread t@1
java.lang.Thread.State: RUNNABLE
at org.springframework.aop.framework.JdkDynamicAopProxy.<init>(JdkDynamicAopProxy.java:102)
at org.springframework.aop.framework.DefaultAopProxyFactory.createAopProxy(DefaultAopProxyFactory.java:65)
at org.springframework.aop.framework.ProxyCreatorSupport.createAopProxy(ProxyCreatorSupport.java:105)
//org.springframework.aop.framework.ProxyCreatorSupport构造函数:
//public ProxyCreatorSupport() {
// this.aopProxyFactory = new DefaultAopProxyFactory();,此出已经出来了,使用了上面的两种代理的构造器;
//}
//
- locked <2b90a58b> (a org.springframework.aop.framework.ProxyFactory)
at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:111)
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:477)
//前面两句代码是判断是否需要代理,if (specificInterceptors != DO_NOT_PROXY) {
//org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(Class<?>, String, Object[], TargetSource)/此方法中内容为重点创建PROXY///代码中
//ProxyFactory proxyFactory = new ProxyFactory();
//并且传递了proxyConfig
//proxyFactory.copyFrom(this);
//此
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:362) //打包装饰成代理
at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1488)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
- locked <25645f05> (a java.util.concurrent.ConcurrentHashMap)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
- locked <101dd23e> (a java.lang.Object)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.springapp.demo.SpringContainer.main(SpringContainer.java:29)
Locked ownable synchronizers:
- None
//SPRING BEAN 的属性填充代码栈如下
2016-06-02 15:17:10
"main" - Thread t@1
java.lang.Thread.State: RUNNABLE
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1116)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
//代码如下:先填充,再暴露出复合物实的bean exposedObject
//try {
populateBean(beanName, mbd, instanceWrapper);
if (exposedObject != null) {
exposedObject = initializeBean(beanName, exposedObject, mbd);
}
//
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
- locked <3c86225c> (a java.util.concurrent.ConcurrentHashMap)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:741)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
- locked <a39e50f> (a java.lang.Object)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.springapp.demo.SpringContainer.main(SpringContainer.java:29)
Locked ownable synchronizers:
- None
转载http://m.myexception.cn/open-source/2103750.html
spring aop实现的过程相关推荐
- Spring AOP 的 Advice 和 Advisor 有什么区别
简单来说:Advice 是通知,Advisor 是增强器.(说了跟没说一样-) 使用 spring aop 要定义切面,切面里面有 通知 和 切点. 在项目启动的过程中,项目中的所有切面会被 Anno ...
- springboot异步和切面_SpringBoot强化篇(八)-- Spring AOP
Spring AOP简介 AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善.它以通过预编译方式和运 ...
- Spring AOP 源码分析 - 拦截器链的执行过程
1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...
- modelandview使用过程_面试问烂的 Spring AOP 原理、Spring MVC 过程
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:莫那一鲁道链接:www.jianshu.com/p/e18fd44964eb Spring AOP ,SpringMVC ,这两个应该 ...
- Spring核心技术原理-(2)-通过Web开发演进过程了解一下为什么要有Spring AOP?
上一篇: Spring核心技术原理-(1)-通过Web开发演进过程了解一下为什么要有Spring? 上一篇从Web开发演进过程的一个侧面简述了一下为什么会有Spring?事实上只介绍了为什么会有Spr ...
- Spring : Spring Aop CGLIB动态代理调用过程
1.美图 2.概述 CGLIB动态代理参考: CGLIB动态代理 CGLIB原理解析参考:CGLIB原理解析 3.分析 Spring AOP CGLIB动态代理调用过程分析,CGLIB动态代理调用过程 ...
- Spring : Spring Aop JDK和CGLIB动态代理调用过程
1.美图 2.概述 3.Spring Aop JDK动态代理调用过程 参考:Spring Aop JDK动态代理调用过程 4. Spring Aop CGLIB动态代理调用过程 参考:
- 【老王读Spring AOP-3】Spring AOP 执行 Pointcut 对应的 Advice 的过程
Spring AOP 执行 Pointcut 对应的 Advice 的过程 前言 版本约定 正文 jdk proxy 是如何执行 Pointcut 对应的 Advice 的? 获取 Advice 链的 ...
- Spring AOP源码解析-拦截器链的执行过程
一.简介 在前面的两篇文章中,分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在得到了 bean 的代理对象,且通知也以合适的方式插在了目标方 ...
最新文章
- 天池供应链大赛来了!
- linux启动exe出来SQLite问题,CentOS 7下sqlite3的问题修复
- DOM文档加载的步骤:
- SimpleDateFormat类的线程安全问题和解决方案
- win7计算机无法最大化,主编教您win7游戏无法全屏怎么办
- postman自动打开_postman---postman自动发博客
- seL4操作系统基础05:event interface与seL4Notification connector
- 如何使用Navicat MySQL导入.sql文件
- win7下如何删除不需要的windows服务
- 为什么领导们总是劝大家不要只盯着工资?
- prototype.js学习(2)
- html网页设计需求分析,网页设计需求分析方法
- SQLServer中的 dbo
- 《数据结构上机实验(C语言实现)》笔记(2 / 1)
- 住房和城乡建设部关于2022年第十批一级建造师注册人员名单的公告
- 服务器dns劫持修复,电脑DNS被劫持怎么修复 电脑dns被劫持解决方法
- 最新炫酷恶趣图制作神器小程序源码+支持流量主/功能强大
- 媒体邀约展会展览发布会新品发布企业邀请媒体官方直播媒体
- 【人工智能】— 逻辑Agent、一般逻辑、Entailment 蕴涵、命题逻辑、前向链接、反向链接、Resolution归结
- Explaining and Harnessing Adversarial Examples——论文的学习笔记01