DAY9 对象作用域和BeanFactory
问题1
- 交给Spring管理的Bean对象,一定是我们用类创建出来的Bean嘛?
不一定,可以是反向代理对象产生的Bean。
- 创建出来的Bean就永远是单例的吗,有可能是原型模式嘛?
有的
细节补充
-
Spring有哪几种作用域:
-
Spring 中在哪里实现了这个作用域的判断?
在
AbstractAutowireCapableBeanFactory
类中的creatBean()
方法中,在创建和修改对象的时候判断单例还是原型。具体的方法体现是beanDefiniton.isSingleton()
方法。假如是单例Bean就会存在单例池中,否则直接返回。 -
补充:什么是单例对象,什么是原型对象?
singleton:每次从spring获取的都是同一个地址的对象 ——> 所以可以说都是一个实例对象。
prototype:每次从spring获取的都是不同地址的对象 ——> 所以每次获取都是新的一个对象。
-
Factory作用:创建AOP代理对象。
-
Factory实现原理:
这里结合网上文章进行补充:
该图是根据腾讯云 Java帮帮 的讲解进行整理的图
总结:
- FactoryBean是一个Bean,但不仅仅是一个Bean。他能生产或者修饰对象生成的工厂Bean。它能在需要的时候生产一个对象,也可以返回任何Bean的实例。
- 一个Bean如果实现了FactoryBean接口,那么根据Bean的名称获取到的实际上是getObject()返回的对象,而不是该Bean的本身,如果想要获取这个Bean自身的实例,就需要在这个Bean的名称上加上 ‘ & ’符号。