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,下面是伪代码:
BeanFactoryPostProcessor
对注册到容器的BeanDefinition所保存的信息做相应的修改
这就相当于在容器实现的第一阶段最后加入一道工序,让我们对最终的BeanDefinition做一些额外的操作,比如修改其中bean定义的某些属性,为bean定义增加其他信息等。
PropertyPlaceholderConfigurer
PropertyOverrideConfigurer
CustomEditorConfigurer
自定义PropertyEditor
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。