[英]How does a method with multiple parameters get passed to a Function that takes a List?
[英]How does @Value annotation inject values when passed in parameters of a method?
我是 Spring 新手,我正在使用 @Value 注釋,發現它可以應用於字段或構造函數/方法參數,但是當我嘗試使用參數注入值時,它沒有為我的參數注入值,我將值設為null 。
我在下面方法的參數中使用了@Value
public void setName(@Value("Adventure of War") String name) {
System.out.println("Setting Company Name");
this.name = name;
}
完整代碼(Company.java)
package gd.rf.anuragsaini.stereotype;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Company {
String name;
String motive;
public void setName(@Value("Adventure of War") String name) {
System.out.println("Setting Company Name");
this.name = name;
}
public void setMotive(@Value("A place for War") String motive) {
System.out.println("Setting Company Motive");
this.motive = motive;
}
@Override
public String toString() {
return "Company{" +
"name='" + name + '\'' +
", motive='" + motive + '\'' +
'}';
}
}
主文件(App.java)
package gd.rf.anuragsaini.stereotype;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App {
public static void main(String[] args) {
ApplicationContext IOC = new ClassPathXmlApplicationContext("config.xml");
Company c1 = IOC.getBean("company", Company.class);
System.out.println(c1);
}
}
輸出
Company{name='null', motive='null'}
這樣setter 就不會被調用。在構造Company 類型的bean 時,frameWork 默認使用Company 類的默認構造函數。
因此,您應該為 setter 使用@Autowired
以保證在構造這些 bean 時框架將調用 setter :
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Company {
String name;
String motive;
@Autowired
public void setName(@Value("Adventure of War") String name) {
System.out.println("Setting Company Name");
this.name = name;
}
@Autowired
public void setMotive(@Value("A place for War") String motive) {
System.out.println("Setting Company Motive");
this.motive = motive;
}
@Override
public String toString() {
return "Company{" + "name='" + name + '\'' + ", motive='" + motive + '\'' + '}';
}
}
輸出 :
Company{name='Adventure of War', motive='A place for War'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.