SpringBoot中类型安全的属性注入

一、什么叫类型安全的属性注入

在此之前,需要了解一下什么叫属性注入,可以参考我的上一篇博客,讲的就是属性注入,参考链接如下:
Spring属性注入

二、为什么需要类型安全

首先,我们需要考虑如下两个问题:
1.若该对象有100+个属性,这样写,代码是否太过复杂和冗余?
2.我们都知道属性是需要私有化的,行为才公开化,这样写,代码是否缺少安全性?

三、解决类型安全的方法

解决办法如下:
1.在Book.java上添加如下注解:

@ConfigurationProperties(prefix = "book")

注:注释或删除原属性上的@Value注解

解释一下原理:
@ConfigurationProperties(prefix = “book”)注解的prefix属性对应的值和xxx.properties文件中的book.xxx属性对应,所以我们再定义其他属性时,只需要将属性的名字和xxx.properties文件中的book.xxx对应即可,这样我们就减少了写代码的工作量和提升了类型的安全性,也契合“属性私有化”这一原则。

举例:
1.参考上一篇文章,只需要修改Book.java即可,代码如下:

package com.mango.properties;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

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

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

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + 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;
    }
}

2.运行结果:

Book{id=1, name='三国演义', author='罗贯中'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值