一、SpringBoot的属性注入解释:( @Value / @ConfigurationProperties )
1.1):使用SpringBoot全局配置文件设置属性时:
-
如果配置属性是Spring Boot已有属性,例如服务端口server.port,那么Spring Boot内部会自动扫描并 读取这些配置文件中的属性值并覆盖默认属性。
-
如果配置的属性是用户自定义属性,例如刚刚自定义的Person实体类属性,还必须在程序中注入这些配 置属性方可生效。
1.2):属性注入常用注解包括:
-
@Configuration:声明一个类作为配置类。
-
@Bean:声明在方法上,将方法的返回值加入Bean容器。
-
@Value:属性注入。
-
@ConfigurationProperties(prefix = “users”):批量属性注入。
-
@PropertySource(“classpath:/jdbc.properties”)指定外部属性文件。在类上添加。
二、使用@Value属性注入:
Demo案例代码,并利用@Value注解注入:
目录结构:(下面我只写用得到的代码哦!注意目录名字)
Users.java:
package com.sxtt.controller.Beans; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /*** * @Author Laugh" * * 可以通过@Value + SPEL 直接绑定SpringBoot配置文件 .yml里的值 * @Value() 固定写法,“${XXXX.XXXX}” 配置文件里面的值 * 案例1: * @Value("${users.username}") * private String username; * * 案例2: * @ConfigurationProperties(prefix="users") * 常用于bean属性和.yml配置文件 * prefix属性 可以指定配置文件中的某节点,该节点中的子节点将自动和属性进行配对绑定 * 注意:ConfigurationProperties 这个注解 比较简单,应该说是比较容易/松散,不限定特殊写法,例如:大写 / 驼峰 / 下划线 / 中划线 / 小写 都会被识别 */ @Component public class Users { @Value("${users.username}") private String username; @Value("${users.age}") private Integer age; private List<String> hobby; private Date birthday; private Map<Integer,String> girlfriend; private Address address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public List<String> getHobby() { return hobby; } public void setHobby(List<String> hobby) { this.hobby = hobby; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Map<Integer, String> getGirlfriend() { return girlfriend; } public void setGirlfriend(Map<Integer, String> girlfriend) { this.girlfriend = girlfriend; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "Users{" + "username='" + username + '/'' + ", age=" + age + ", hobby=" + hobby + ", birthday=" + birthday + ", girlfriend=" + girlfriend + ", address=" + address + '}'; } }
application.yml:
server: port: 8080 servlet: context-path: /laugh users: username: Laugh" age: 25
App.java:
package com.sxtt; import com.sxtt.controller.Beans.Users; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest public class App { @Autowired private Users user; @Test void contextLoads(){ System.out.println(user); } }
输出结果:
三、使用@ConfigurationProperties属性注入:
Demo案例代码,并利用@ConfigurationProperties注解注入:
目录结构同上:
注意:其余不变,改变的只有Users.java哦:
Users.java:
package com.sxtt.controller.Beans; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; /*** * @Author Laugh" * * 可以通过@Value + SPEL 直接绑定SpringBoot配置文件 .yml里的值 * @Value() 固定写法,“${XXXX.XXXX}” 配置文件里面的值 * 案例1: * @Value("${users.username}") * private String username; * * 案例2: * @ConfigurationProperties(prefix="users") * 常用于bean属性和.yml配置文件 * prefix属性 可以指定配置文件中的某节点,该节点中的子节点将自动和属性进行配对绑定 * 注意:ConfigurationProperties 这个注解 比较简单,应该说是比较容易/松散,不限定特殊写法,例如:大写 / 驼峰 / 下划线 / 中划线 / 小写 都会被识别 */ @Component @ConfigurationProperties(prefix="users") public class Users { private String username; private Integer age; private List<String> hobby; private Date birthday; private Map<Integer,String> girlfriend; private Address address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public List<String> getHobby() { return hobby; } public void setHobby(List<String> hobby) { this.hobby = hobby; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Map<Integer, String> getGirlfriend() { return girlfriend; } public void setGirlfriend(Map<Integer, String> girlfriend) { this.girlfriend = girlfriend; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "Users{" + "username='" + username + '/'' + ", age=" + age + ", hobby=" + hobby + ", birthday=" + birthday + ", girlfriend=" + girlfriend + ", address=" + address + '}'; } }
输出结果:
四、补充说明:
其.yml配置文件,可以有很多种写法:
4.1):小写:
users: username: Laugh" age: 25
4.2):大写:
users: USERNAME: Laugh" AGE: 25
4.3):驼峰:
users: userName: Laugh" age: 25
4.4):中划线:
users: user-Name: Laugh" age: 25
4.5):下划线:
users: user_Name: Laugh" age: 25
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/279165.html