(五)Spring详解——DI扩展

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”作用域的一定不能,其他作用域不一定能;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值