SpringBoot属性注入

普通属性注入

由于Spring Boot源自Spring,所以Spring中存在的属性注入,在Spring Boot中一样也存在。由于Spring Boot中,默认会自动加载application.properties文件,所以简单的属性注入可以直接在这个配置文件中写。

例如,创建Book类

@Component
public class Book {

    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}

在application.properties文件中定义属性:

book.name=三国演义
book.author=罗贯中
book.id=99

按照传统的方式(Spring中的方式),可以直接通过@Value注解将这些注解注入到Book对象中:

@Component
public class Book {

    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    //省略getter和setter

注意:

Book对象本身也要交给Spring容器去管理,如果Book没有交给Spring容器,那么Book中的属性也无法从Spring容器中获取到值。

配置完成后,在Controller或者单元测试中注入Book对象,启动项目,就可以看到属性已经注入到对象中了。

一般来说,我们在application.properties文件中主要存放系统配置,这种自定义配置不建议放在该文件中,可以自定义properties文件来存放自定义配置。

例如在resources目录下,自定义book.properties文件,内容如下:

book.name=三国演义
book.author=罗贯中
book.id=99

此时,项目启动时不会自动的加载该配置文件,如果是在xml配置中,可以通过如下方法引用该properties文件:

<context:property-placeholder location="classpath:book.properties"/>

如果是在Java配置中,可以通过@PropertySource来引入配置:

@Component
@PropertySource("classpath:book.properties")
public class Book {

    @Value("${book.id}")
    private Long id;
    @Value("${book.name}")
    private String name;
    @Value("${book.author}")
    private String author;
    //省略getter和setter

这样,当项目启动时,就会自动加载book.properties文件。这只是Spring中属性注入的一个简单用法,和Spring Boot没有关系。

类型安全的属性注入

Spring Boot引入了类型安全的属性注入,如果采用Spring中的配置方式,当配置的属性非常多的时候,工作量就很大了,而且容易出错。

使用类型安全的属性注入,可以有效的解决这个问题:

@Component
@PropertySource("classpath:book.properties")
@ConfigurationProperties(prefix = "book")
public class Book {
    private Long id;
    private String name;
    private String author;
    //省略getter和setter

这里,主要是引入@ConfigurationProperties(prefix = “book”)注解,并且配置了属性的前缀,此时会自动将Spring容器中对应的数据注入到对象对应的属性中,就不用通过@Value注解挨个注入了,减少工作量并且避免出错。

数组注入

yaml也支持数组注入,例如:

my:
  servers:
	- dev.example.com
	- another.example.com

这段数据可以绑定到一个带Bean的数组中:

@ConfigurationProperties(prefix="my")
@Component
public class Config {

	private List<String> servers = new ArrayList<String>();

	public List<String> getServers() {
		return this.servers;
	}
}

项目启动后,配置中的数组会自动存储到servers集合中。当然,yaml不仅可以存储这种简单数据,也可以在集合中存储对象。例如下面这种:

redis:
  redisConfigs:
    - host: 192.168.66.128
      port: 6379
    - host: 192.168.66.129
      port: 6380

这个可以被注入到如下类中:

@Component
@ConfigurationProperties(prefix = "redis")
public class RedisCluster {
    private List<SingleRedisConfig> redisConfigs;
	//省略getter/setter
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值