学习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);
}
}
输出:
Menu{id=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类注入并使用了。