美文网首页
运行时的值注入

运行时的值注入

作者: TheMrBigHead | 来源:发表于2018-09-06 15:39 被阅读0次

运行时注入Value

Spring提供了两种方式来进行运行时值注入:

  1. Property placeholders
  2. Spring Expression Language (SpEL)
1. 注入外部的Value
1.1 使用Spring提供的Environment来加载配置文件中的配置
package com.soundsystem;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;

@Configuration
@PropertySource("classpath:/com/soundsystem/app.properties")
public class ExpressiveConfig {
    @Autowired
    Environment env;

    @Bean
    Declare a property source

    public BlankDisc disc() {
        return new BlankDisc(env.getProperty("disc.title"), 
                             env.getProperty("disc.artist"));
    } 
}

@PropertySource注解指明了配置文件的位置

1.2 解析PROPERTY PLACEHOLDERS
<bean id="sgtPeppers"
      class="soundsystem.BlankDisc"
      c:_title="${disc.title}"
      c:_artist="${disc.artist}" />
@Component
public class BlankDisc {
    public BlankDisc (
        @Value("${disc.title}") String title,
        @Value("${disc.artist}") String artist) {
      this.title = title;
      this.artist = artist;
  )
}

需要配置PropertyPlaceholderConfigurer bean或者PropertySourcesPlaceholderConfigurer bean

@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
  return new PropertySourcesPlaceholderConfigurer();
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
  <context:property-placeholder />
</beans>
2. 使用Spring Expression Language

注意:SpEL expressions是被#{}包在里面的哟,不是{}({}是property placeholder的)

示例:

#{1}

#{T(System).currentTimeMillis()}

#{sgtPeppers.artist}

#{systemProperties['disc.title']}
@Component
public class BlankDisc {

    public BlankDisc(
        @Value("#{systemProperties['disc.title']}") String title,
        @Value("#{systemProperties['disc.artist']}") String artist) {
      this.title = title;
      this.artist = artist;
  )
}

<bean id="sgtPeppers"
      class="soundsystem.BlankDisc"
      c:_title="#{systemProperties['disc.title']}"
      c:_artist="#{systemProperties['disc.artist']}" />

运算符:


image.png

使用正则表达式:

#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.com'}

相关文章

网友评论

      本文标题:运行时的值注入

      本文链接:https://www.haomeiwen.com/subject/epsxgftx.html