使用Spring怎么对组件进行赋值

2021/4/18 22:34:20
栏目: 其他类
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

使用Spring怎么对组件进行赋值?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1. @Value & @PropertySource

1.1 使用方式

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

@Value:赋值

  • 基本数值

  • 可以写 SpEL,#{}

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

1.2 代码

1. Person

@Data@Slf4j@ToStringpublic 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@AllArgsConstructorpublic class Message {

  private String label = null;

}

2. SpringConfig

@Configurationpublic 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) {
    
    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  }

}

看完上述内容,你们掌握使用Spring怎么对组件进行赋值的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注辰讯云资讯频道,感谢各位的阅读!


辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: 请教一个gridview实现某列可编辑的功能