Spring中如何使用@Value註解實現給Bean屬性賦值
屬性賦值
隻用Spring註解開發的時候,可以使用@Value搭配@PropertySource註解進行給Bean的屬性進行賦值。
@Value
@Value註解的定義:
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Value { /** * The actual value expression: for example {@code #{systemProperties.myProp}}. */ String value(); }
可以看到@Value註解接受的參數隻能是字符串,所以使用時參數都需要帶上雙引號。並且可以在屬性,方法,參數等位置上標註。value屬性支持以下三種類型:
基本數據類型,包括String,int,boolean等類型。
SpEL,#{}的形式即表示使用SpEL表達式,一般用於獲取環境中其他bean的屬性,當使用Elivis運算符“表達式1?:表達式2”,比如#{ “obj.property? :default_value” }形式時,這裡的obj是取當前容器中的對象,default_value就是前面的值為空時的默認值。
在主配置類中通過@PropertySource註解加載配置文件,然後通過${ property : default_value}的形式取配置文件中的值,其中default_value表示前面的值為空時的默認值。
測試
1.在添加瞭Spring依賴的Maven項目中創建
以下兩個實體類Student類和Teacher類
public class Teacher { public int id; public String name; public Teacher() { // TODO Auto-generated constructor stub System.out.println("teacher-----創建"); } public Teacher(int id, String name) { super(); this.id = id; this.name = name; } //省略getter和setter方法 }
在Student類中使用${}取配置文件的值,#{}取容器中的teacher對象的name屬性
public class Student{ @Value("1") private int id; @Value("${student.name}") private String name; @Value("${student.address:北京}") private String address; @Value("#{teacher.name?:'老子'}") private String teacherName; @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", address=" + address + ", teacherName=" + teacherName + "]"; } //省略getter和setter方法 }
2.在resources目錄下創建一個配置文件person.properties
添加以下值:
student.name=張三 person.address=廣州市
3.創建配置類
使用@PropertySource註解讀取外部配置文件person.properties中的key/value保存到運行的環境變量中。
@Configuration @PropertySource("person.properties") public class SpringConfig2 { @Bean public Student student() { return new Student(); } @Bean public Teacher teacher() { return new Teacher(2,"老李"); } }
4.創建測試類進行測試
編寫代碼獲取容器中的id為student的bean和直接獲取配置環境的屬性值。
public class IoCTest { @Test public void test() { //獲取Spring的IOC容器 AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(SpringConfig2.class); //從容器中獲取bean Student stu = (Student) applicationContext.getBean("student"); System.out.println(stu); //獲取環境變量 ConfigurableEnvironment environment = applicationContext.getEnvironment(); String property = environment.getProperty("person.address"); System.out.println(property); //關閉容器 applicationContext.close(); } }
5.測試結果:
如何給Bean的屬性賦值(註入)
1.通過構造方法設置值。
2.設置註入(通過set方法)
通過property標簽(內部是通過調用類的set方法將值註入)
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Spring的DI依賴註入詳解
- @PropertySource 無法讀取配置文件的屬性值解決方案
- Spring純註解開發模式讓開發簡化更簡化
- Java基礎之Spring5的核心之一IOC容器
- 詳解Spring註解驅動開發之屬性賦值