服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

2022-11-23 10:49YuShiwen Java教程

这篇文章主要介绍了SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法,文章内容介绍详细需要的小伙伴可以参考一下

properties配置文件如下:

human.name=Mr.Yu
human.age=21
human.gender=male

如何把properties里面的配置绑定到JavaBean里面,以前我们的做法如下:

public class PropertiesUtil {
  public static void getProperties(Person person) throws IOException {
      Properties properties = new Properties();
      properties.load(new FileInputStream("src/main/resources/demo.properties"));
      //得到配置文件key的名字
      Enumeration enumeration = properties.propertyNames();
      while (enumeration.hasMoreElements()){
          String key =(String)enumeration.nextElement();
          String value = properties.getProperty(key);
          System.out.println("key="+key+"——————value="+value);
          //封装到JavaBean
          //以下内容省略
      }
  }
}

输出结果:

key=human.name——————value=Mr.Yu
key=human.age——————value=21
key=human.gender——————value=male

Process finished with exit code 0

可以看到这个过程十分繁杂,但是在SpringBoot中这个过程将会变得非常简单。

在SpringBoot中有如下3种方法:

1.@ConfigurationProperties注解+@Component(或@Controller或@Service或@Repository)注解

  • 只有在容器中的组件,才会拥有SpringBoot提供的强大功能,也就是如果我们需要使用到@ConfigurationProperties注解,那么我们首先要保证该对JavaBean对象在IoC容器中,所以需要用到Component注解来添加组件到容器中。
  • @ConfigurationProperties注解中prefix与value互相都是别名

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

  • 也就是说@ConfigurationProperties(value = "human")与@ConfigurationProperties(prefix = "human")是一样的
  • prefix和value指的是前缀的意思

代码测试: properties配置文件:

human.name=Mr.Yu
human.age=21
human.gender=male

Person类:

@Component ////只有在容器中的组件,才会拥有SpringBoot提供的强大功能
@ConfigurationProperties(value = "human")
public class Person {
  public String name;
  public int age;
  public String gender;
  public Person() {
  }
  public Person(String name, int age, String gender) {
      this.name = name;
      this.age = age;
      this.gender = gender;
  }
  public String getName() {
      return name;
  }
  public void setName(String name) {
      this.name = name;
  }
  public int getAge() {
      return age;
  }
  public void setAge(int age) {
      this.age = age;
  }
  public String getGender() {
      return gender;
  }
  public void setGender(String gender) {
      this.gender = gender;
  }
  @Override
  public String toString() {
      return "Person{" +
              "name='" + name + '\'' +
              ", age=" + age +
              ", gender='" + gender + '\'' +
              '}';
  }
}

测试类如下:

//@Controller
////@ResponseBody以字符串的方式写给浏览器,而不是跳转到某个页面
//@ResponseBody
//@RestController =  @Controller +  @ResponseBody
@RestController
public class HelloController {
  //自动注入属性
  @Autowired
  Person person;
  @RequestMapping("/person")
  public Person getPerson(){
      return person;
  }
}

测试结果:

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

@ConfigurationProperties注解+@EnableConfigurationProperties注解

这种方式@EnableConfigurationProperties注解一定要在配置类上写,@EnableConfigurationProperties的意思是开启属性配置功能,开启谁的属性配置功能呢,因为我们上面的Person类想进行配置绑定,所以我们在后面加上参数Person.class:@EnableConfigurationProperties(Person.class)

@EnableConfigurationProperties(Person.class)的作用就是把这个Person组件注册到容器中,对象的名称为:human-com.ysw.boot.properties.Person 其中human是@ConfigurationProperties(value = "human")中前缀value的值

在Person类上还是有@ConfigurationProperties注解,这种方式把Person类上的@Component注解换成了配置类上的@EnableConfigurationProperties(Person.class)注解

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

这种方式主要用在引用第三方包时,比如第三方包中有一个Person类,该类中没有使用@Component,我们也不能够给第三方包中的类加上@Component,这个时候就可以使用在配置类上加上@EnableConfigurationProperties注解的方法。

@ConfigurationProperties注解+@Import注解

  • 使用@Import给容器中自动创建出这个类型的组件、默认组件的名字就是全类名
  • @Import注解与2中的@ConfigurationProperties注解效果是一样的
  • 只不过他们注册到容器中的名称不同:
    • @ConfigurationProperties注解注册到容器中对象的名称为:human-com.ysw.boot.properties.Person 其中human是@ConfigurationProperties(value = "human")中前缀value的值
    • @Import注解注册到容器中对象的名称为:com.ysw.boot.properties.Person

配置类:

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

Person类:

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

测试类:

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

application.properties文件:

server.port=8888
human.name=Mr.Yu
human.age=21
human.gender=male222

测试结果:

SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法

到此这篇关于SpringBoot中@ConfigurationProperties注解实现配置绑定的三种方法的文章就介绍到这了,更多相关SpringBoot配置绑定方法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7088670331543486495

延伸 · 阅读

精彩推荐
  • Java教程Redis在springboot中的使用教程

    Redis在springboot中的使用教程

    这篇文章主要介绍了Redis在springboot中的使用教程,本文实例代码相结合的形式给大家介绍的非常详细,需要的朋友可以参考下...

    野蛮-生长6632021-05-09
  • Java教程Java SpringBoot实现AOP

    Java SpringBoot实现AOP

    AOP包括连接点(JoinPoint)、切入点(Pointcut)、增强(Advisor)、切面(Aspect)、AOP代理(AOP Proxy),具体的方法和类型下面文章会举例说明,感兴趣的小伙...

    Tttori12172022-01-05
  • Java教程经典的Java面试题及回答集锦(基础篇)

    经典的Java面试题及回答集锦(基础篇)

    本文给大家收藏整理了java面试题及回答,非常不错,具有参考借鉴价值,需要的朋友参考下吧...

    LiQiyaoo10232021-04-13
  • Java教程java九九乘法表示例

    java九九乘法表示例

    这篇文章主要介绍了java九九乘法表示例,需要的朋友可以参考下 ...

    Java教程网3362019-11-18
  • Java教程对arraylist中元素进行排序实例代码

    对arraylist中元素进行排序实例代码

    这篇文章主要介绍了对arraylist中元素进行排序实例代码,还是比较不错的,这里分享给大家,供需要的朋友参考。...

    大神不解释10222021-01-30
  • Java教程Java并发之synchronized实现原理深入理解

    Java并发之synchronized实现原理深入理解

    这篇文章主要介绍了Java中synchronized实现原理详解,涉及synchronized实现同步的基础,Java对象头,Monitor,Mark Word,锁优化,自旋锁等相关内容,具有一定借鉴...

    zejian_6612021-12-08
  • Java教程java字符串相似度算法

    java字符串相似度算法

    这篇文章主要介绍了java字符串相似度算法,是Java实现比较典型的算法,具有一定参考借鉴价值,需要的朋友可以参考下 ...

    Benjamin_whx5772019-12-09
  • Java教程java调用mysql存储过程实例分析

    java调用mysql存储过程实例分析

    这篇文章主要介绍了java调用mysql存储过程的方法,以实例形式较为详细的分析了mysql数据库的建立和存储过程的实现方法,需要的朋友可以参考下 ...

    imzoer2382019-12-20