• 三、Spring-Bean高级装配


    内容

    • Spring profile
    • 条件化的bean声明
    • 自动装配与歧义性
    • bean的作用域
    • Spring表达式语言

    名词

    • 单例 (Singleton)
    • 原型 (Prototype)
    • 会话 (Session)
    • 请求 (Request)
    • Spring表达式语言 (Spring Expression Language,SpEL)

    3.1 处理自动装配的歧义性

    @Autowired
    public void setDessert(Dessert dessert) {
    	this.dessert = dessert;
    }
    
    
    @Component
    public class Cake implements Dessert {...}
    
    @Component
    public class Ice implements Dessert {...}
    
    @Component
    public class Cookies implements Dessert {...}
    

    以上都是注解,会被装载到Spring的上下文,但是并没有唯一,无歧义的可选值。因此,Spring会抛出异常,因此将bean中的某一个设为首选(primary)的bean,可以缩小这个可选的bean的范围。

    3.1.1 标识首选的bean

    @Primary+@Component用在组件扫描的bean上
    @Primary+@Bean 用在配置bean的声明中

    3.2 bean的作用域

    默认情况下,Spring应用上下文中所有bean都是作为以单例(Singleton)的形式创建的。也就是说,不管给定的一个bean被注入到其他bean多少次,每次注入的都是同一个实例。但类是易变的(mutable),它们会保持一些状态。因此重用并不安全。

    Spring的多种作用域:

    名字 解释
    单例(singleton) 在整个应用中只创建bean的一个实例
    原型(Prototype) 每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
    会话(Session) 在Web应用中,为每个会话创建一个bean实例。
    请求(Request) 在Web应用中,为每个请求创建一个bean实例。

    单例是默认作用域,如果要选择其他作用域,要使用@Scope注解,可以与@Bean和@Component一起使用。

    3.3 使用Spring表达式语言进行装配

    Spring表达式语言——(Spring Expression Language,SpEL)。

    它以强大和简洁的方式将值装配到bean属性和构造器参数中,在这个过程中所使用的表达式会在运行时计算得到的值。

    SpEL属性:

    • 使用bean的ID来引用bean;
    • 调用方法和访问对象的属性;
    • 对值进行算术,关系和逻辑运算;
    • 正则表达式匹配
    • 集合操作
    • 配合@Value()一起使用
    1. SpEL表达式:"#{...}"
    2. 属性占位符:"${...}"
    谁不是孤身一人,翻山越岭
  • 相关阅读:
    【动画技巧】在Flash中自定义鼠标外观
    【动画技巧】GIF动画转SWF小技巧
    SQL Server 2008空间数据应用系列十一:提取MapInfo地图数据中的空间数据解决方案
    SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息
    jQuery的模板与数据绑定插件
    ASP.NET MVC 入门5、View与ViewData
    一个jQuery写的虚拟键盘
    ASP.NET MVC 入门4、Controller与Action
    使用XML文件来动态配置ASP.NET MVC的Route规则
    ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
  • 原文地址:https://www.cnblogs.com/hasz/p/12977162.html
Copyright © 2020-2023  润新知