spring手动配置

本文总结自:https://www.cnblogs.com/V1haoge/p/7183408.html

SpringBoot中免除了大部分配置,但是对于一些特定的情况,还是需要我们进行手动配置的。

手动配置有两种方式:

1. SpringBoot为我们提供了application.properties配置文件,我们可以对默认的配置进行修改,还能加入一些第三方的配置,几乎所有配置都可以写到application.peroperties文件中,这个文件会被SpringBoot自动加载

2. 自定义一个配置文件,但这些文件就需要我们进行手动加载

 

备注1:SpringBoot可以识别两种格式的配置文件,yml与properties,我们可以将application.properties文件换成application.yml,这两个文件都可以被SpringBoot自动识别并加载,

但如果是自定义的配置文件,就最好还是使用properties格式的文件,因为SpringBoot中暂时还并未提供手动加载yml格式文件的功能(这里指注解方式)。

备注2:application.properties配置文件需要放置到指定的位置:src/main/resource目录下,一般自定义的配置文件也位于此目录之下。

 

如何使用配置项?

1. 只要是加载到Spring容器中的配置项都可以直接使用@Value("${key}")的方式来引用,一般将其配置在字段顶部,表示将配置项的值赋值给该字段。

2. 将这些配置项与一个JavaBean绑定起来使用,绑定一次,我们就可以随时使用

 

绑定使用分两种情况:

1. 将application.properties中的配置与JavaBean类绑定

与属性绑定的JavaBean的类定义顶部加@Component注解和@ConfigurationProperties(prefix="key")注解,

前者的目的是为了JavaBean可以被SpringBoot项目启动时候被扫描到并加载到Spring容器之中,

后者为属性绑定注解,它的作用就是将指定的前缀的配置项的值与JavaBean的字段绑定,得与@EnableConfigurationProperties(JavaBean.class)配合使用,注意二者并非使用在同一位置,

注意:为了绑定的成功,字段的名称与配置项键的最后一个键名得相同,这样整个键在去掉前缀的情况下就和字段名称一致,以此来进行绑定。

 

2. 将自定义配置文件中的配置与Javabean绑定。

与之前的基本相同,只是配置不能自动加载,得手动加载

额外配置:

在JavaBean之上加上@PropertySource注解。

将@Component改为@Configuration,为什么这么做呢?

@Configuration注解的底层就是@Component,但是二者意义不同,@Configuration注解侧重配置之意,@Component侧重组件之意,当然配置也是项目组件之一,在这里我们要将配置文件属性与JavaBean绑定,当然更侧重配置之意。

 

@EnableConfigurationProperties(JavaBean.class)

@EnableConfigurationProperties注解@ConfigurationProperties注解配套使用,

标注有@ConfigurationProperties注解的Beans可以被使用标准的方式注册(使用@Bean注解),或者,直接用使用@EnableConfigurationProperties指定注册,例如:@EnableConfigurationProperties(JavaBean.class)

一个例子:

package com.donghao.model;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@PropertySource("classpath:donghao.properties")
@ConfigurationProperties(prefix="donghao1")
public class Donghao {
    private String name;
    private String sex;
    private String age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
}

定义控制器:DonghaoController

package com.donghao.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.donghao.model.Donghao;

@RestController
@RequestMapping("/donghao")
@EnableConfigurationProperties(Donghao.class)
public class DonghaoController {
    
    @Autowired
    Donghao donghao;
    
    @Value("${donghao.name}")
    private String name;
    
    @Value("${donghao.sex}")
    private String sex;
    
    @Value("${donghao.age}")
    private String age;

    
    @RequestMapping("/hello")
    public String hello(){
        return "我的名字叫"+name+",我是"+sex+"生,今年"+age+"岁了!";
    }
    
    @RequestMapping("/ss")
    public String ss(){
        return donghao.getName()+donghao.getSex()+donghao.getAge();
    }
}

定义启动入口类:DonghaoApplication.java

package com.donghao;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DonghaoApplication {

    public static void main(String[] args) {
        
        SpringApplication.run(DonghaoApplication.class, args);
        
    }

}

 

转载于:https://www.cnblogs.com/yanze/p/10438676.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值