首页 > 技术文章 > Spring 开发之组件赋值

djw12333 2019-09-10 14:43 原文

  1. @Value & @PropertySource

  1.1 使用方式

  @PropertySource:读取外部配置文件中的 k/v 保存到运行的环境变量中;加载完外部的配置文件以后使用 ${} 取出配置文件的值

  @Value:赋值

  基本数值

  可以写 SpEL,#{}

  可以写 ${};取出配置文件【properties】中的值(在运行环境变量里面的值)

  1.2 代码

  1. Person

  @Data

  @Slf4j

  @ToString

  public class Person {

  @Value("#{001+001}")

  private Long id;

  @Value("zs")

  private String name;

  @Value("${person.address}")

  private String address;

  @Value("${person.age:19}")

  private Integer age;

  }

  2. SpringConfig

  @Configuration

  @PropertySource(value = "classpath:person.properties")

  public class SpringConfig {

  @Bean

  public Person person() {

  return new Person();

  }

  }

  3. PropertiesTest

  public class PropertiesTest {

  public static void main(String[] args) {

  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

  Person person = context.getBean(Person.class);

  System.out.println(person);

  //Person(id=2, name=zs, address=上海市, age=19)

  }

  }

  2. @Profile

  2.1 使用方式

  @Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件

  加了环境标识的 bean,只有这个环境被激活的时候才能注册到容器中。默认是 default 环境

  写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效

  没有标注环境标识的 bean 在任何环境下都是加载的

  2.2 代码

  1. Message

  @Data

  @NoArgsConstructor

  @AllArgsConstructor

  public class Message {

  private String label = null;

  }

  2. SpringConfig

  @Configuration

  public class SpringConfig {

  @Profile("default")

  @Bean

  public Message defaultMessage() {

  return new Message("default");

  }

  @Profile("dev")

  @Bean

  public Message devMessage() {

  return new Message("dev");

  }

  @Profile("test")

  @Bean

  public Message testMessage() {

  return new Message("test");

  }

  @Profile("prod")

  @Bean

  public Message prodMessage() {

  return new Message("prod");

  }

  }

  3. 激活方式 1

  激活 profile:设置虚拟机参数 -Dspring.profiles.active=dev,test

  public class ProfileTest {

  public static void main(String[] args) {无锡人流医院哪家好 http://www.bhnnkyy120.com/

  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);

  String[] names = context.getBeanNamesForType(Message.class);

  for (String name : names) {

  System.out.println(name);

  }

  //devMessage

  //prodMessage

  }

  }

  4. 激活方式 2

  public class ProfileTest {

  public static void main(String[] args) {

  //1. 创建一个 AnnotationConfigApplicationContext

  AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

  //2. 设置需要激活的环境

  context.getEnvironment().setActiveProfiles("dev", "prod");

  //3. 注册主配置类

  context.register(SpringConfig.class);

  //4. 刷新容器

  context.refresh();

  String[] names = context.getBeanNamesForType(Message.class);

  for (String name : names) {

  System.out.println(name);

  }

  //testMessage

  //prodMessage

  }

  }

推荐阅读