第三章 高级装配

一、环境与profile

  • 在开发软件的时候,一个很大的挑战是将应用程序从一个环境迁移到另外一个环境中。一种方式是在单独的配置类或者(XML文件)中配置咩哥bean,然后在构建阶段确定将哪一个人配置编译到可部署的应用中。
  • 1.1、配置profile bean
    • 在3.1版本中,Spring引入了bean profile功能。要使用profile,首先要将所有的bean定义整理到一个或多个profile中,在应用部署到每个环境时,要确保对应的profile处于激活状态。
    • 但@Profile("dev")注解用在类上时,该类中的bean只有在dev环境中才会创建。
    • 从Spring3.2开始,@Profile可以用在方法上,这样可以将两个不同环境中的bean的声明放到同一个配置类中。
    • 没有指定profile的bean始终都会被创建,与是否激活无关。
    • XML中也可以配置profile<beans profile="dev">......
  • 激活profile
    • 激活时以来两个独立的属性spring.profiles.active/spring.profiles.defualt。如果设置了active那激活active,否则激活default。
    • 多种方式设置这两个属性:作为DispatcherServlet的初始化参数;作为web应用中的上下文参数;作为JNDI条目;作为环境变量;作为JVM的系统属性;在集成测试类上,使用@ActiveProfiles。在测试类上设置。

二、条件化的bean

  • 在Spring4中引入了@Conditional注解,如果给定的条件计算结果为true,就会创建这个bean,否则这个bean会被忽略。
  • 在该注解上添加参数类A,A实现Condition接口,重写matches方法,返回true或false
  • 从Spring4开始,@Profile也是基于@Conditional和Condition实现。

三、处理自动装配的歧义性

  • 如果三个类都实现了同一个接口,都使用了@Component注解,在创建的时候Spring无法作出选择返回那个类的对象。
  • 3.1、标示首选的bean
    • @Primary在类上,告诉Spring该类是首选的bean
  • 3.2、限定自动装配的bean
    • @Autowird和@Qualifier("cold")(搭配,在类名上加上一样的名称
    • 通过声明自定义的限定符注解,我们可以同时使用多个限定符。

四、bean的作用域

  • 默认情况下,Spring应用上下文中所有bean都是作为以单例的形势创建的。作用域有:单例,在整个应用中只创建一个bean的实例;原型,每次注入或者通过Spring应用上下文获取的时候都会创建一个新的bean实例;会话,在web应用中,为每个会话创建一个bean实例;请求,为WEB应用中,为每个请求创建一个bean实例。用@Scop("protatype")。xml中也可以配置
  • 4.1、使用会话和请求作用域
  • 4.2、在XML中声明作用域代理

五、运行时值注入

  • 5.1、注入外部的值
    • 通过在类上@PropertyResource("classpath:/com...../app.properties")声明属性源并通过Spring的Environment来检索属性
    • 在Spring装配中,占位符的形势为使用"${...}"包装属性名称。
  • 5.2、使用Spring表达式语言进行装配
    • 将表SpEL语言表达式放到"#{...}"中。里面可以使用System.currentTimeMillis,Math.PI等值;
    • 可以表示字面值,#{'hello'}
    • 可以应用bean、属性、方法,#{sgtPeppers}
    • 运算符,加减乘除等
    • 计算正则
    • 计算集合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值