[英]static setter method injection in Spring
我有以下要求,我想通過Spring配置文件傳遞http:\\\\localhost:9080\\testws.cls
值作為setter注入。 我如何為TEST1_WSDL_LOCATION
進行此靜態變量設置器注入
public class test1
extends javax.xml.ws.Service
{
private final static URL TEST1_WSDL_LOCATION;
static {
URL url = null;
try {
url = new URL("http:\\localhost:9080\testws.cls");
} catch (MalformedURLException e) {
e.printStackTrace();
}
TEST1_WSDL_LOCATION = url;
}
public test1(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public test1() {
super(TEST1_WSDL_LOCATION, new QName("http://tempuri.org", "test1"));
}
/**
*
* @return
* returns test1Soap
*/
@WebEndpoint(name = "test1Soap")
public Code1Soap getTest1Soap() {
return (Test1Soap)super.getPort(new QName("http://tempuri.org", "Test1Soap"), Test1Soap.class);
}
}
請幫幫我。
Spring無法從外部初始化static final字段。
只是不可能。 靜態final字段是在類加載時初始化的,而Spring早就有機會做任何事情了(無論如何,您都無法將參數傳遞給ClassLoader)。
您將不得不重新考慮您的設計。 這行不通!
@Component
public class UserUtils
{
private static UserAccessor userAccessor;
/**
* Sets the user DAO. This method should never be called except by Spring
* @param userAccessor The user accessor to set
*/
@Autowired(required = true)
public void setUserAccessor(userAccessor UserAccessor) {
UserUtils.userAccessor = userAccessor;
}
}
您可以在bean實例上有一個setter方法。
Class WsdlCode{
private static URL WSDL_LOCATION;
public void setUrlString(String url) {
URL url = null;
try {
url = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
WSDL_LOCATION = url;
}
當然,直到所有bean都設置好屬性后,該字段才可用,但是Spring為此提供了一些接口。 例如, InitializingBean
。
正如有人已經提到的那樣,Spring並不是那樣工作的。 在Spring可能影響該值之前,將運行一個靜態初始化程序。
您可能應該做的是將Spring中的Code1類實例化為bean,然后在其中設置值。 如果該值需要由您的bean的多個實例共享,則在Spring中將值設為單例作用域bean。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.