spring已知的设计模式1、代理org.springframework.aop.framework.JdkDynamicAopProxy#getProxy(java.lang.ClassLoader){// ...return Proxy.newProxyInstance(classLoader, proxiedInterfaces, this);// ...}2、visitor定义org.springframework.core.type.classreading.AnnotationMetadataReadingVisitor#AnnotationMetadataReadingVisitor使用org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider#findCandidateComponents{MetadataReader metadataReader = this.metadataReaderFactory.getMetadataReader(resource); // !!! 使用asm工具读取类信息{org.springframework.core.type.classreading.CachingMetadataReaderFactory#getMetadataReader{// ...metadataReader = super.getMetadataReader(resource);{return new SimpleMetadataReader(resource, this.resourceLoader.getClassLoader());{// ...AnnotationMetadataReadingVisitor visitor = new AnnotationMetadataReadingVisitor(classLoader);classReader.accept(visitor, ClassReader.SKIP_DEBUG);// ...}}return metadataReader;}}}3、策略定义org.springframework.beans.factory.support.CglibSubclassingInstantiationStrategy使用org.springframework.beans.factory.support.DefaultListableBeanFactory{org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory{private InstantiationStrategy instantiationStrategy = new CglibSubclassingInstantiationStrategy();}}org.springframework.beans.factory.support.DefaultListableBeanFactory#createBeanInstance{org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance{return instantiateBean(beanName, mbd);{return getInstantiationStrategy().instantiate(mbd, beanName, parent);}}}4、责任链定义org.springframework.aop.framework.ReflectiveMethodInvocation使用org.springframework.aop.framework.JdkDynamicAopProxy#invoke{invocation = new ReflectiveMethodInvocation(proxy, target, method, args, targetClass, chain); // 创建调用器// Proceed to the joinpoint through the interceptor chain.retVal = invocation.proceed(); // 执行结果}5、Adapter定义org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.BeanFactoryAspectJAdvisorsBuilderAdapter使用org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator#initBeanFactory{// ...this.aspectJAdvisorsBuilder =new BeanFactoryAspectJAdvisorsBuilderAdapter(beanFactory, this.aspectJAdvisorFactory);// ...}org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator#findCandidateAdvisors{// ...this.aspectJAdvisorsBuilder.buildAspectJAdvisors()// ...}6、Builder定义org.springframework.aop.aspectj.annotation.BeanFactoryAspectJAdvisorsBuilder使用org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator#initBeanFactory{// ...this.aspectJAdvisorsBuilder =new BeanFactoryAspectJAdvisorsBuilderAdapter(beanFactory, this.aspectJAdvisorFactory);// ...}org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator#findCandidateAdvisors{// ...this.aspectJAdvisorsBuilder.buildAspectJAdvisors()// ...}7、Factory定义org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory使用org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator#initBeanFactory{// ...this.aspectJAdvisorFactory = new ReflectiveAspectJAdvisorFactory(beanFactory);// ...}org.springframework.aop.aspectj.annotation.BeanFactoryAspectJAdvisorsBuilder#buildAspectJAdvisors{// ...if (this.advisorFactory.isAspect(beanType)){// ...List<Advisor> classAdvisors = this.advisorFactory.getAdvisors(factory);// ...}// ...}8、Listener定义org.springframework.context.ApplicationListener使用org.springframework.context.support.AbstractApplicationContext{initApplicationEventMulticaster(){this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);}addApplicationListener(ApplicationListener<?> listener){this.applicationEventMulticaster.addApplicationListener(listener); // !!!!}start(){// ...publishEvent(new ContextStartedEvent(this));{getApplicationEventMulticaster().multicastEvent(applicationEvent, eventType);{// ...ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event));for (final ApplicationListener<?> listener : getApplicationListeners(event, type)) { // 指定事件类型的事件监听器列表Executor executor = getTaskExecutor();if (executor != null) {executor.execute(new Runnable() {@Overridepublic void run() {invokeListener(listener, event);}});}else {invokeListener(listener, event);}}// ...}}}}9、单例使用org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, boolean)