spring in action笔记(四)——高级装配

高级装配这一块儿其实基本的装配思想明白之后这一块儿应该没什么需要理解的,大都是需要记的东西,我就直接写下来了,不再一一探讨实现原理和实现原因

@Profile(“../../..”)
根据Profile指定的环境决定哪些bean需要创建哪些bean不需要创建,典型的就是再具体按项目中按照开发环境配置不同的数据源.。3.1版本之前只支持类级别@Profile注解,3.2开始支持@Profile方法级别注解,没有指定profile的bean始终都会被创建。设置后可以通过很多方法来确定激活哪一个bean,普遍的方式是在servlet的web.xml中配置。

@Conditional
条件话bean,用于希望bean在某一特定条件下才会创建时。例如@Conditional(ExistsCondition.class),其中,注解中的类需要实现Condition接口,Condotion接口中有个返回值为布尔值的matches方法,使用该注解时容器首先会执行实现该实现类的matches方法,返回true就创建bean。Condition接口的matches方法会传入一个Context参数,提供丰富的方法来检查bean定义,bean是否存在,bean属性,环境变量是否存在以及值,查看ResourceLoader加载的资源,Classloader加载的类。此外还会传入一个AnnotatedTypeMetaData获取bean的注解信息。

@Primary
设置自动装配时的首选bean,避免有多个bean符合自动装配条件时spring抛出异常

@Qualifier
比@Primary更强大的定位配置bean注解,后面跟一个限定符定位到具体的bean,默认限定符是bean的ID,当然也可以自定义限定符,甚至自定义限定符注解

@Scope
规定bean的作用域,bean的作用域有四种,单例(Singleton),原型(Prototype),会话(Session),请求(Request),比较典型的就是购物车模型。其中在使用webApplicationContext.SCOPE_SESSION或者webApplicationContext.SCOPE_REQUEST的时候需要指定proxyMode即代理模式来处理在会话之前注入代理bean的问题,同样的请求(Request)范围的bean也是使用该方法处理此问题

最后关于高级装配的是运行时注入,一种方法是通过属性占位符实现,一种是通过Spring表达式语言实现。属性占位符的重点在于Spring的Environment类,通过自动装配实例化之后提供诸多获取外部属性资源的方法不赘述,另外提供占位符”${…}”来获取外部属性。。SpEL则是用”#{…}”对表达式进行计算。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值