• Spring中一些概念的总结


     

    Spring中一些概念的总结

    对象和Bean的区别?

     

    个人观点:所谓的bean也是一个java对象,只不过这个对象是通过spring定义的,而一开始就是通过<bean>标签定义的,所以叫做bean。

     

    普通对象和Bean对象还有其他区别,因为Bean对象是由Spring生成的,Spring在生成Bean对象的过程中,会历经很多其他步骤,比如属性注入,aop,new实例,调用初始化方法。

     

    如何理解BeanDefinition?

    顾名思义,BeanDefinition是用来描述一个Bean的,Spring会根据BeanDefinition来生成一个Bean。

     

    BeanFactory和FactoryBean的区别

     

    BeanFactory

    BeanFactory是Spring IOC容器的顶级接口,其实现类有XMLBeanFactory,DefaultListableBeanFactory以及AnnotationConfigApplicationContext等。BeanFactory为Spring管理Bean提供了一套通用的规范。接口中提供的一些方法如下:

    boolean containsBean(String beanName)
    
    Object getBean(String)
    
    Object getBean(String, Class)
    
    Class getType(String name)
    
    boolean isSingleton(String)
    
    String[] getAliases(String name)

     

    可以通过BeanFactory获得Bean。

     

    FactoryBean

    FactoryBean首先也是一个Bean,但不是简单的Bean,而是一个能生产对象的工厂Bean,可以通过定义FactoryBean中的getObject()方法来创建生成过程比较复杂的Bean。

     

    如何理解BeanFactoryPostProcessor?

    BeanFactoryPostProcessor也叫做BeanFactory后置处理器。这里包括两个概念,一个是BeanFactory,一个是后置处理器。

     

    BeanFactory表示Bean工厂,可以基于BeanDefinition来生成Bean对象,所以在BeanFactory中存在所有的BeanDefinition。

    后置处理器可以理解为:当某物品生产好了以后,可以进一步通过后置处理器来对此物品进行处理。

     

    所以BeanFactoryPostProcessor可以理解为,可以得到BeanFactory对象并对它进行处理,比如修改它其中的某个BeanDefinition,或者直接向BeanFactory中添加某个对象作为bean。

     

    如何理解BeanDefinitionRegistryPostProcessor?

    BeanDefinitionRegistryPostProcessor是一个接口,继承了BeanFactoryPostProcessor,所以它也是一个BeanFactory后置处理器,所以它可以操作BeanFactory。

     

    它特殊的地方在于,它拥有的功能比BeanFactoryPostProcessor多,比如BeanFactoryPostProcessor是不能向BeanFactory中添加BeanDefinition的(只能添加Bean对象),但是BeanDefinitionRegistryPostProcessor是可以向BeanFactory中添加BeanDefinition的。

     

    如何理解@Import与ImportBeanDefinitionRegistrar?

    Import注解

    @Import首先是一个注解,在Spring中是用来向Spring容器中导入Bean的。换个角度理解,就是我们一般都是通过在某个类上加上@Component注解来标志一个bean的,但如果我们希望以一种更灵活的方式去定义bean的话,就可以利用@Import注解。

     

    @Import注解所指定的类,在Spring启动过程中会对指定的类进行判断,判断当前类是不是实现了比较特殊的接口,比如ImportBeanDefinitionRegistrar,如果存在特殊的接口就执行特殊的逻辑,如果没有则生成该类对应的BeanDefinition并放入BeanFactory中。

     

    ImportBeanDefinitionRegistrar

    通过Import注解可以注册bean,虽然它也支持同时注册多个bean,但是不方便,特别是当我们想通过实现一些复杂逻辑来注册bean的话,仅仅通过Import注解是不方便的,这时就可以使用ImportBeanDefinitionRegistrar这个接口来动态的注册bean了,我这里说的注册bean指的是:通过生成BeanDefinition,并且把BeanDefinition放入BeanFactory中。

     

     

    如何理解BeanDefinitionRegistry和BeanFactory?

     

    BeanFactory表示Bean工厂,可以利用BeanFactory来生成bean。

    BeanDefinitionRegistry表示BeanDefinition的注册表,可以用来添加或移除BeanDefinition。

     

     

     

  • 相关阅读:
    C#中发送邮件,包含Html代码 CDO.Message
    CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
    分享到微信朋友圈
    获取验证码效果和后台代码(js+html+cs)
    弹出遮罩层
    WebAPI上传文件
    zoj1665 dij变形
    hdu1535 SPFA
    hdu1217 floyd
    poj1703 并查集
  • 原文地址:https://www.cnblogs.com/lanqingzhou/p/13592197.html
Copyright © 2020-2023  润新知