spring aop 代理对象生成
所属分类 spring
浏览量 894
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(String)
protected Object getSingleton(String beanName, boolean allowEarlyReference) {
Object singletonObject = this.singletonObjects.get(beanName);
if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
synchronized (this.singletonObjects) {
singletonObject = this.earlySingletonObjects.get(beanName);
if (singletonObject == null && allowEarlyReference) {
ObjectFactory> singletonFactory = this.singletonFactories.get(beanName);
if (singletonFactory != null) {
singletonObject = singletonFactory.getObject();
this.earlySingletonObjects.put(beanName, singletonObject);
this.singletonFactories.remove(beanName);
}
}
}
}
return singletonObject;
}
public Object getSingleton(String beanName, ObjectFactory> singletonFactory)
AbstractAutowireCapableBeanFactory#doCreateBean()
1. createBeanInstance() 实例化Bean
2. populateBean() 填充属性
3. initializeBean() 初始化后的各种回调事件
后置处理器
BeanPostProcessor#postProcessAfterInitialization
AnnotationAwareAspectJAutoProxyCreator
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.getEarlyBeanReference(Object, String)
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(Object, String)
@Override
public Object postProcessAfterInitialization(@Nullable Object bean, String beanName) throws BeansException {
if (bean != null) {
Object cacheKey = getCacheKey(bean.getClass(), beanName);
if (!this.earlyProxyReferences.contains(cacheKey)) {
return wrapIfNecessary(bean, beanName, cacheKey);
}
}
return bean;
}
wrapIfNecessary 方法
createProxy
getProxy
createAopProxy().getProxy()
两种代理实现
JDK Cglib
JDK Proxy.newProxyInstance
CGLIB 基于 ASM
例子代码
https://gitee.com/dyyx/hellocode/blob/master/demo/springbootdemo/src/main/java/aop/Hello.java
spring如何解决循环依赖
AOP要点整理
基于Aspect注解的spring aop 实例
AOP知识点
AspectJ简介及实例
上一篇
下一篇
影响商业的50本书第11到19本
MBA商业黑话
H2 TCP server 模式
影响商业的50本书第20到29本
disruptor简介及核心概念
Disruptor 和 BlockingQueue 性能测试比较