cglib代理使用场景(spring中类加了注解 @Configuration)

1. 当一个类上面加了注解 @Configuration 时候,初始化ApplicationContext 的时候, invokeBeanDefinitionRegistryPostProcessors 方法解析此类,则从map里面遍历 BeanDefinition ,判断当前BeanDefinition 的map里面的属性key -configurationClass 值是full还是lite,刚开始扫描时候为null,则继续解析,判断若果加了@Configuration configurationClass 的值设置为full;
2. 接下来 调用 invokeBeanFactoryPostPorcessors ,此方法遍历所有的BeanFactoryPostPorcessors(包括自定义的可以修改spring工厂) 在遍历中会调用到enhanceConfigurationClass ,此方法中获取regist里面的所有类,遍历判断 isfullConfigurationClass 是否为full,若为full,存到一个LinkedHashMap 中,为lite则不存,若map为null ,则返回之后直接new 对象;若nap 不为null,则去完成cglib代理的实现,
3. cglib代理的实现:调用enhance() ,判断该类是否实现EnhancedConfiguration 接口(EnhancedConfiguration.class.isAssignableFrom(configClass))spring完成代理则会让该类去实现此接口;若没有被代理则去实现代理 enhancer.create()创建代码对象。

你可能感兴趣的:(cglib代理使用场景(spring中类加了注解 @Configuration))