1、Spring 基础系列之 IoC
2、Spring 基础系列之 Bean

概念

所有注册到容器中的对象,spring统一称为bean

Bean相关的属性及设置


lazyInit 延迟初始化

指定bean是否进行延迟初始化,值可以是true或false
可以在 @ComponentScan 注解中指定
或是xml配置的beans元素中 设置default-lazy-init属性

autowire 注入方式

byName 根据属性名称自动查找相关的依赖对象注入

byType 根据属性类型自动查找相关的依赖对象注入

constructor 类似byType,但是不是通过setter注入,而是通过构造方式注入

autodetect 自动选择byType或constructor注入方式,如果对象拥有默认无参数的构造方法,容器会优先考虑byType的自动绑定模式。否则,会使用constructor模式。当然,如果通过构造方法注入绑定后还有其他属性没有绑定,容器也会使用byType对剩余的对象属性进行自动绑定。


scope

singleton 单例模式,在IoC容器中只存在一个实例,所有对象共享这个实例,在对象初始化后一直存在有IoC容器中,直到容器结束运行。

prototype 容器每次在对象调用时返回一个新的实例,IoC容器不在持有这个对象的引用,生命周期由调用方管理。

以下三种类型在2.0以后新增,只能在web应用中使用

request 依赖于HttpRequest的生命周期,HTTP请求结束后对象的生命周期也将结束。

session 每个新的session将会创建新的对象,和session生命周期一致。

global session 针对portlet的应用,它映射到portlet的global范围的session。如果在普通的基于servlet的Web应用中使用了这个类型的scope,容器会将其作为普通的session类型的scope对待。


FactoryBean
是spring提供的可扩展实例化bean的接口,可以自定义返回实例化的bean。

public interface FactoryBean<T> {
    @Nullable
    T getObject() throws Exception;
 @Nullable
    Class<?> getObjectType();
 default boolean isSingleton() {
        return true;
 }
}

getObject()方法会返回该FactoryBean生产的对象实例,可以结合动态代理动态实现一些特定功能的接口。例如:@FeignClient只需要定义接口spring框架就能动态实现接口的功能,@EnableFeignClients注解用到的FeignClientFactoryBean就是FactoryBean,下面是伪代码:
image.png


BeanFactoryPostProcessor
对注册到容器的BeanDefinition所保存的信息做相应的修改
这就相当于在容器实现的第一阶段最后加入一道工序,让我们对最终的BeanDefinition做一些额外的操作,比如修改其中bean定义的某些属性,为bean定义增加其他信息等。

PropertyPlaceholderConfigurer
PropertyOverrideConfigurer
CustomEditorConfigurer
自定义PropertyEditor


lane
1 声望1 粉丝