博客
关于我
spring(SpEL、 IOC 容器中 Bean 的生命周期方法、配置bean(多种方法))
阅读量:483 次
发布时间:2019-03-06

本文共 2805 字,大约阅读时间需要 9 分钟。

Spring 表达式语言(简称 SpEL)

Spring 表达式语言(SpEL)是 Spring 应用程序的强大功能之一,支持运行时查询和操作对象图。以下是关于 SpEL 的详细介绍:


SpEL 的基本语法

SpEL 的语法类似于 Java 的 EL(JavaExpressio Language),其中使用 #{…} 作为定界符,括号内的所有字符都被认为是 SpEL 表达式。SpEL 提供了对 Bean 属性的动态赋值能力,是实现 Spring Bean 引用和操作的核心工具。


SpEL 的功能

通过 SpEL,可以实现以下功能:

  • Bean 引用:直接通过 Bean 的 ID 或其他引用方式获取特定 Bean。
  • 方法调用:调用 Bean 的方法或链式方法。
  • 表达式计算:计算文字表达式、数字、布尔值等。
  • 正则表达式匹配:使用 matches 运算符进行复杂的条件判断。

  • SpEL 表达式的构成

    SpEL 表达式可以包含以下类型的字面量:

  • 整数#{5}#{...}
  • 小数#{89.7}#{...}
  • 科学计数法#{1e4}#{...}
  • 字符串#{‘Chuck’}#{‘Chuck’},两种引号都可以使用。
  • 布尔值#{false}#{true}

  • SpEL 与 Bean 的操作

    引用对象和属性

    • 引用其他对象
      @Beanpublic class Car {    private String brand;    private int maxSpeed;    // setter 方法省略}
    • 引用其他对象的属性
      @Beanpublic class Person {    private Car car;    // setter 方法省略}
    • 引用静态方法或静态属性
      @Beanpublic class Car {    private String brand;    private int maxSpeed;    public static final int MAX_SPEED = 100; // 静态属性或方法}

      使用 SpEL 引用


    SpEL 运算符

    SpEL 支持多种运算符,包括算术运算符、比较运算符、逻辑运算符等。以下是一些常用的运算符示例:

  • 算术运算符

    • +-*/%^(指数运算)
    • 注意:+ 还可以用于字符串连接。
    • 例子
      #{car.price > 50 ? '高' : '低'}
  • 比较运算符

    • ==!=>=<=&&||! 等。
    • 例子
      #{'a' >= 'c' ? '多' : '少'}
  • 逻辑运算符

    • andornot||&& 等。
    • 例子
      #{@NotEmpty(name) == false}
  • if-else 表达式

    • 使用 ?: (ternary 运算符) 或 ?:(Elvis 运算符)。
    • 例子
      #{car.price > 30 ? '高价' : '低价'}
  • 正则表达式匹配

    • 使用 matches 运算符定义复杂规则。
    • 例子
      #{car.registrationNumber matches '^A.*' }

  • Bean 的生命周期管理

    Spring IOC 容器对 Bean 的生命周期进行管理,包括:

  • 创建 Bean 实例:通过构造函数或工厂方法。
  • 初始化 Bean:调用 init-method
  • 描述 Bean:调用 destroy-method
  • Bean 后置处理器:在初始化后或销毁前对 Bean 进行额外处理。

  • Bean 的创建方式

    1. 静态工厂方法创建 Bean

    • 配置文件

      工厂类

      public class StaticFactory {    public static Car getCar(String l) {        return new Car("I", 26, 32);    }}

    2. 实例工厂方法创建 Bean

    • 配置文件

      工厂类

      public class Instance {    private Map
      carMap = new HashMap<>(); public Instance() { carMap.put("I", new Car("I", 26, 32)); } public Car getCar(String l) { return carMap.get(l); }}

    3. FactoryBean 接口

    • 实现类
      public class CarBean implements FactoryBean
      { private String brand; public Car getObject() { return new Car(brand, 26, 38.5); }}

      配置文件


    注解配置

    组件扫描(Component Scanning)

    Spring 能够自动扫描 classpath 下的类,找到带有注解(如 @Component@Service@Controller@Repository)的类,并自动将其注册为 Spring Bean。

    自动注入(Autowired)

    • 基础注入

      @Autowiredprivate UserService userService;

      属性命名与注解匹配

    • 自定义 bean 名称

      @Autowired(required=false)@Qualifier("userRepository")private UserRepository userRepository;
    • 注入多个 Bean

      @Autowiredprivate List
      userList;

    泛型依赖注入

    从 Spring 4.1 开始,支持对泛型属性进行依赖注入。例如:

    @AllArgsConstructorpublic class UserService {    private UserRepository userRepository;}

    配置文件整合

    导入多个配置文件

    Spring 支持将多个配置文件合并到一个文件中,例如:


    通过这些方法,SpEL 提供了强大的功能,能够简化 Bean 的创建和引用,同时提高应用程序的灵活性和可维护性。

    转载地址:http://aevdz.baihongyu.com/

    你可能感兴趣的文章
    pgpool-II3.1 的内存泄漏(一)
    查看>>
    PgSQL · 特性分析 · PG主备流复制机制
    查看>>
    PGSQL主键序列
    查看>>
    PGSQL安装PostGIS扩展模块
    查看>>
    pg数据库中两个字段相除
    查看>>
    PhalApi:[1.23] 请求和响应:GET和POST两者皆可得及超越JSON格式返回
    查看>>
    Phalcon环境搭建与项目开发
    查看>>
    Phantom.js维护者退出,项目的未来成疑
    查看>>
    Pharmaceutical的同学们都看过来,关于补码运算的复习相关内容
    查看>>
    Phaser性能测试加强版
    查看>>
    phoenix 开发API系列(一)创建简单的http api
    查看>>
    Phoenix 查看表信息及修改元数据
    查看>>
    phoenixframework集成了所有自动化测试的思想的平台。mark一下。
    查看>>
    phoenix_执行sql报错_Error: ERROR 504 (42703): Undefined column. columnName=(state=4270_大数据工作笔记0181
    查看>>
    phoenix启动失败_The history file `/root/.sqlline/history` may be an older history---记录024_大数据工作笔记0184
    查看>>
    Phoenix基础命令_视图映射和表映射_数字存储问题---大数据之Hbase工作笔记0036
    查看>>
    phoenix无法连接hbase shell创建表失败_报错_PleaseHoldException: Master is initializing---记录020_大数据工作笔记0180
    查看>>
    Phoenix简介_安装部署_以及连接使用---大数据之Hbase工作笔记0035
    查看>>
    phoenix连接hbase报错Can not resolve hadoop120, please check your network_记录026---大数据工作笔记0187
    查看>>
    PhotoPrism:这款获得35.8K星的AI照片管理神器你值得拥有
    查看>>