spring 第三章节 高级装配

  1. spring装载bean的时候,可以依据不同环境(全局变量值)对不同的bean进行初始化。这样可以让系统根据不同环境采用最佳实现方式。(开发环境、测试环境、QA环境、生产环境甚至是前端开发环境)
    @profile
  2. spring装配bean的时候,可以依据不同的条件判定(系统环境变量值、依赖bean是否装配、自定义表达式结果等)决定是否对bean进行装配。
    @Conditional
  3. 当现实情况(一个接口多个实现类)无法满足自动装配的条件(被装配的bean有唯一的实现类)时,spring提供以下方式明确唯一的实现类
    3.1 标示首选的bean
    @Primary
    缺点是当@Primary出现多次的话,spring一样不知道应该采用哪个。
    3.2 限定自动装配的bean,对所有可选的bean进行筛选。其实删选条件就是bean的id名。
    @Qualifier(“筛选条件”)
    缺点是当bean的名字变更后,bean的id(默认的)也会随之变更,此时筛选条件就失效了。
    3.3 创建自定义的限定符,与3.2基本一致,只是为bean定义一个固定的id,这样bean名称变更不会影响bean的id。筛选条件就不需要变更了。
    缺点,如果自定义了相同的id名,spring一样无法自动装配。
    3.4 使用自定义的限定符注解,原理与3.3相同,只是为一个bean设定多个id,在装配的地方也使用多个id进行筛选。例如如此定义一个bean(食物、肉类、羊肉、切片),装配时设定筛选条件(食物、肉类、羊肉、切片)。这样spring就可以找到对应的类了。
    缺点:sprnig不允许同一个注解重复出现。需要自定义一个继承了@Qualifier注解的注解。装配时使用自定义的注解进行设置。

4.bean的生命周期
spring默认是采用单例模式创建实例的。不过单例并不能满足所有情况。
spring支持以下四种模式:
单例:在整个应用中,只创建bean的一个实例。
原型:每次注入或者通过spring应用上下文获取的时候,都会创建一个新的bean实例。
会话:在web应用中,为每个会话创建一个bean实例。
请求:在web应用中,为每个请求创建一个bean实例。
特殊情况:将会话bean注入到单例bean中。单例bean在项目启动时创建,而此时会话bean并没有创建,将导致自动装配失败。此时需要在会话bean注解中注明懒解析。这样在单例bean构建时,spring会创建一个代理类去set属性。当单例调用会话bean的时候,再使用当前会话内的bean实例代替代理类去执行。

5.运行时值注入
运行时注入与普通注入的区别在于,普通注入的发生点在项目启动时执行,运行时注入的发生点在项目运行过程中执行。
spring提供了两种方式来实现运行注入
1. 属性占位符
2. spring表达式语句(spel)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值