spring boot @ConfigurationProperties和@EnableConfigurationProperties的作用和区别

Posted @不会Ayy的拉马尔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot @ConfigurationProperties和@EnableConfigurationProperties的作用和区别相关的知识,希望对你有一定的参考价值。

学习SpringBoot时对这两个注解的作用理解的不是很清楚,特此记录一下:

@ConfigurationProperties:

被标注的类会使用外部文件给bean注入属性

示例:

menu类

application.yml:

menu:
  id: 1
  name: nema1
  url: url1
  parent_id: pid1
  menu_order: morder1
  menu_icon: micon1
  menu_type: mtype

test:

@RunWith(SpringRunner.class)
@SpringBootTest
public class CrudSpringbootEasyuiApplicationTests 

    @Autowired
    private Menu menu;

    @Test
    public void test() 
        System.out.println(menu);
    

输出:

Menuid=1, name='nema1', url='url1', parent_id='pid1', menu_order='morder1', menu_icon='micon1', menu_type='mtype1'

这里我配合@Component一起使用,先将menu类注册为bean,再通过@ConfigurationProperties注解使用外部yml文件将属性注入。 其实也可以配合任何可以将一个类注册为bean的注解一起使用,Springboot内部经常配合@Bean一起使用。

 

@EnableConfigurationProperties:

作用:启用配置属性类

示例:

MyServerConfigurationProperties类:

@ConfigurationProperties(prefix = "myserver")
public class MyServerConfigurationProperties 
    private int port;
    private String url;
    private String brand;

    //省略get set方法    

application.yml

myserver:
  port: 8080
  url: localhost
  brand: alibaba

test:

@RunWith(SpringRunner.class)
@SpringBootTest
@EnableConfigurationProperties(MyServerConfigurationProperties.class)
public class CrudSpringbootEasyuiApplicationTests 

	@Autowired
	private MyServerConfigurationProperties properties;

	@Test
	public void test() 
		int port = properties.getPort();
		String url = properties.getUrl();
		String brand = properties.getBrand();

		System.out.println("port: " + port);
		System.out.println("url: " + url);
		System.out.println("brand: " + brand);
	

配置了一个MyServerConfigurationProperties类,编写了yml文件,并在test类上添加了@EnableConfigurationProperties注解,将value设置为MyServerConfigurationProperties.class,这样在该类中就可以将该Properties类注入并使用了。

以上是关于spring boot @ConfigurationProperties和@EnableConfigurationProperties的作用和区别的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse编写SpringBoot中的Application.yml没有任何提示

Spring Security getAuthentication() 返回 null

Spring 工具类 ConfigurationClassParser 分析得到配置类

Spring云配置刷新后如何执行自定义逻辑?

Spring Boot 学习例子

Consider defining a bean of type ‘com.example.springbootdemo.mapper.UserMapper‘ in your configuratio