Spring表达式(Spring EL)

Spring还提供了更灵活的注入方式——Spring表达式。Spring EL拥有很多功能:

  • 使用Bean的id来引用Bean。
  • 调用指定对象的方法和访问对象的属性。
  • 进行运算。
  • 提供正则表达式进行比配。
  • 集合配置。

Bean的属性和方法

使用注解的方式需要用到注解@Value,在属性文件的读取中使用的是“$”,而在Spring EL中则使用“#”。下面我们以角色类为例进行分析,代码如下:


@Component(value = "role")
public class Role {
    @Value("#{1}")
    private Long id;
    @Value("#{role_name_1}")
    private String roleName;
    @Value("#{role_note_1}")
    private String note;
}

这样就可以定义一个BeanName为role的角色类,同时给予它所有的属性赋值,这个时候可以通过另外一个Bean去引用它的属性或者调用它的方法,比如先建一个类——ELBean类,代码如下:

@Component("elBean")
public class ELBean {
    //通过beanName获取bean,然后注入
    @Value("#{role}")
    private Role role;
    
    //获取bean的属性id
    @Value("#{role.id}")
    private Long id;
    
    //调用bean的getNote方法,获取角色名称
    @Value("#{role.getNote().toString()}")
    private String note;

}

使用类的静态常量和方法

有时候我们可能希望使用一些静态方法和常量,比如圆周率Π,而在Java中就是Math类的PI常量,如果需要注入它,代码如下:

@Value("#{T(Math).PI}")
private double pi;

同样的,有时候需要使用Math类的静态方法去生产随机数,这个时候就需要使用它的random方法,代码如下:

@Value("#{T(Math).random()}")
private double random;

这样就可以通过调用类的静态方法加载对应的数据了。

Spring EL运算
Spring EL还可以进行运算,比如在ELBean上增加一个数字num,其值默认为要求是角色编号(id)+1,那么我们可以这么写:

@Value("#{role.id+1}")
private int num;

有时候“+”运算符也可以运用在字符串的连接上,代码如下:

@Value("#{role.roleName+role.note}")
private String str;

这样就能够得到一个角色名称和备注连接的字符串。
比较两个值是否相等,还有其他更多的比较,比如大于、小于等。

@Value("#{role.id==1}")
private boolean equalNum;

@Value("#{role.note eq 'note_1'}")
private boolean equalString;

@Value("#{role.id>2}")
private boolean greater;

在Java中,也许你会怀旧三目运算,我们也可以去实现这样的功能

@Value("#{role.id>1 ? 5:1}")
private int max;

@Value("#{role.note? : 'hello'}")
private String defaultString;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值