Bean作用域(scope)
- singleton每个Spring ioc容器只存在一个当前bean的对象
- prototype每次向Spring容器请求的bean都返回一个全新的Bean
- web作用域
- request每次请求创建一个新的Bean
- session每个会话创建一个新的Bean
自动装配(autowire)
目前Spring支持“default”、“no”、“byName ”、“byType”、“constructor”四种自动装配,默认是“no”指不支持自动装配的
- default表示使用默认的自动装配,默认的自动装配需要在
<beans>
标签中使用default-autowire属性指定,其支持“no”、“byName ”、“byType”、“constructor”四种自动装配 - no,不支持自动装配,必须明确指依赖关系
- byName根据名字进行自动装配,只能用于set注入。比如我们有方法“setGoosName”,则“byName”方式Spring容器将查找名字为goodsName的Bean并注入,如果找不到指定的Bean,将什么也不注入。此时不需要配置property,注入时是根据名字注入的,会把当前bean自己排除在外, 比如Goods类定义了setGoods方法,是不能注入的。
- byType根据类型注入。用于set方法,比如“setGoodsType”方法需要注入GoodsType类型数据,则Spring容器将查找GoodsType类型数据,如果找到一个则注入该Bean,如果找不到将什么也不注入,如果找到多个Bean将优先注入
<bean>
标签“primary”属性为true的Bean,否则抛出异常来表明有个多个Bean发现但不知道使用哪个 - constructor根据类型注入构造方法参数,和byType相似
不能自动装配的数据类型:
Object,基本数据类型
autowire-candidate属性可被设为false
通过“<beans>
”标签default-autowire-candidates属性指定的匹配模式,不匹配的将不能作为自动装配的候选者
依赖检查
推荐使用@Required注解的方式
- none默认方式,不检查
- objects检查除基本类型以外的依赖对象
- simple对基本类型进行检查
- all对所有类型进行检查
其他
- 延迟初始化bean
Spring容器会在创建容器时提前初始化“singleton”作用域的Bean,“singleton”就是单例的意思即整个容器每个Bean只有一个实例,在<bean>
标签上指定 “lazy-init” 属性值为“true”即可延迟初始化Bean - depends-on
使用depends-on属性指定的Bean要先初始化完毕后才初始化当前Bean,当指定Bean都是singleton(只有singleton的bean能被Spring销毁)时,使用depends-on属性指定的Bean要在当前bean销毁之后才能销毁。
- init-method=”init” :指定初始化方法,在构造器注入和setter注入完毕后执行。
- destroy-method=”destroy”:指定销毁方法,只有“singleton”作用域能销毁,“prototype”作用域的一定不能,其他作用域不一定能;