zoukankan      html  css  js  c++  java
  • spring中的重点

    @Configration加与不加有什么区别?

    加了这个注解以后会在spring中标识了Full属性,如果不标记的话会标记为lite,不过该类会继续解析@ComponentScan和@Implort等。

    有个Full标记以后,就会根据当前这个类生成CGLib代理对象,返回的也是代理对象。

    而且对于该类中的@Bean方法的返回结果进行缓存,代理对象会先使用“&方法名”的方式先获取对象看是否为FactoryBean,如果是的话,还要对getObject返回的对象继续做动态代理。而每次是否需要代理,是根据cglib增强了一个接口作为标识决定的,如果已经实现则已经代理完毕,直接返回。

    这就是加了@Configration和不加的区别。

    import有哪3中情况?

    (1)第一种情况@Import(selector)类:这个时候会调用实现了ImportSelector接口的selector方法(该对象本身不会添加为bean),返回字符串并反射创建对象(该对象会被添加为bean),然后继续递归查看当前对象是否继续有@Import注解,继续解析,直到完毕,ps:注意使用这种接口接入的类型你无法参与beanDefinition的修改,只能是操作原有的对象

             项目:我们在这里扫描第三方的扩展jar包。

    这种情况我们以AOP为例子,我们可以根据该注解添加情况,决定是否给某些bean添加代理。

    (2)第二种情况@Import普通类,直接添加为bean。

    (3)第三种情况@Import一个实现了ImportBeanDefinitionRegister接口的类。ps:这相当于把beanDefinition注册器提供给你,完全由你掌控。

             项目:这里我们举一个例子,我们oes环境vadp两个历史遗留环境需要初始化不同的数据源,我们在bi项目启动的时候让其@Import一个实现了ImportBeanDefinitionRegistrar接口的类型;spring在处理BeanDefinition的时候会回调我自定义的registerBeanDefinitions方法,我们会"手动定义一个数据源的beanDefinition"

    Spring Bean后置处理器哪些接口?
    (1)BeanPostProccess:能够插手Bean的实例化过程,在bean还没有放入容器之前,而该接口回调方法在“调用构造方法之后”调用的;

    而该接口中的方法是由CommonAnnotationBeanProcessor类进行回调的。

    (2)BeanFactoryPostProcess:

    该回调接口会在每个bean创建之前进行回调。典型代表ConfigrationClassPostProcessor#postProcessBeanFactory方法会对标记了@Configration的类实现cglib代理,这是在BeanFactoryPostProcess层面做的事儿。

    (3)BeanDefinitionRegistryPostProcessor:

    BeanDefinitionRegistyPostProcessor是BeanFactoryPostProcess的子类,接口方法在BeanFactoryPostProcess的接口方法之前执行。在spring代码中有两个集合分别存放BeanDefinitionRegistyPostProcessor的实现和BeanFactoryPostProcess的实现,而优先会处理BeanDefinitionRegistyPostProcessor集合。

    spring内部通过AnnotatedBeanDefinitionReader添加了ConfigrationClassPostProcessor类的定义,并实现;该类是spring的核心会去处理@Import以及@Bean,以及扫描所有的@Component类,最后形成spring bean。

  • 相关阅读:
    [ACM]HDU Problem 2000 + Java
    [测试开发面试]zyb面试题总结
    [ACM]HDU Problem 1001 + Java
    [ACM]HDU Problem 1002 + Java
    [ACM]HDU Problem 1000 + Java
    [Intellij Idea]激活与配置
    [Android开发]合集(随时更新)
    [Android开发]前端样式设计合集(随时更新)
    [Android开发]emulator无法启动的问题
    [Intellij Idea] IDE使用技巧帖集合(随时更新)
  • 原文地址:https://www.cnblogs.com/zzq-include/p/12157557.html
Copyright © 2011-2022 走看看