/**
* 执行流程.
*
* 1.为容器中注册AnnotationAwareAspectJAutoProxyCreator
* 1.1获取AopTest 这个类上注解的所有信息,进行相应类的加载
* invokeBeanFactoryPostProcessors(beanFactory);
* PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());
* 1.2//获取注解对应类的定义
* invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);
* 1.3 ConfigurationClassPostProcessor 此时调用此方法 ,这个后置处理是bean容器初始化时候自行加入的,
* 可以去看register(componentClasses);
* 1.4执行:postProcessor.postProcessBeanDefinitionRegistry(registry);
* (加载类的定义信息 Set<ConfigurationClass> 为传入的参数,扫描到的所有类)
* --> this.reader.loadBeanDefinitions(configClasses);
* 1.5 如果是AopTest 需要获取注解Import导入的方法
* -->loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars());
* 1.6 调用注册bean定义的方法(AspectJAutoProxyRegistrar 为实现类),
* 此时为bean容器中注册AnnotationAwareAspectJAutoProxyCreator
* -->registrar.registerBeanDefinitions(metadata, this.registry));
*
* 2. 开始注册所有后置处理器BeanPostProcessors ->>> registerBeanPostProcessors(beanFactory);
* 2.1获取容器中所有BeanPostProcessor 名称
* String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
* 2.2 注册实现 PriorityOrdered 的 BeanPostProcessors
* sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
* 2.3 真正开始创建 org.springframework.beans.factory.support.DefaultListableBeanFactory
* BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
* ->> 开始创建单实例bean
* sharedInstance = getSingleton(beanName, () -> {
* try {
* return createBean(beanName, mbd, args);
* }
* catch (BeansException ex) {
* // Explicitly remove instance from singleton cache: It might have been put there
* // eagerly by the creation process, to allow for circular reference resolution.
* // Also remove any beans that received a temporary reference to the bean.
* destroySingleton(beanName);
* throw ex;
* }
* });
* 3.开始创建我们的目标对象
* 3.1 对象创建完毕
* 3.2--->>属性填充
* populateBean(beanName, mbd, instanceWrapper);
* 3.3--->> 此时AOP代理的Processer开始发挥作用
* exposedObject = initializeBean(beanName, exposedObject, mbd);
*
* 真正生成代理对象的方法
* Object wrappedBean = bean;
* if (mbd == null || !mbd.isSynthetic()) {
* //应用 processor.postProcessBeforeInitialization(result, beanName); 前置处理器
* wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
* }
*
* try {
* invokeInitMethods(beanName, wrappedBean, mbd);
* }
* catch (Throwable ex) {
* throw new BeanCreationException(
* (mbd != null ? mbd.getResourceDescription() : null),
* beanName, "Invocation of init method failed", ex);
* }
* if (mbd == null || !mbd.isSynthetic()) {
* wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
* }
*
* 4. AOP生成代理对象 其实走的后置处理器
* wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
* 4.1//判断是否需要代理
* Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null);
* 4.2开始进行代理对象创建
* Object proxy = createProxy(
* bean.getClass(), beanName, specificInterceptors, new SingletonTargetSource(bean));
*
* //执行代理类的创建,如果有接口,创建JDK动态代理
* if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) {
* return new JdkDynamicAopProxy(config);
* }
* //创建cgblib 动态代理
* return new ObjenesisCglibAopProxy(config);
*
* 5. 执行Cglib intercept 方法
*
*
*/