簡體   English   中英

Spring中的靜態setter方法注入

[英]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;
    }
}

資源: http : //www.connorgarvey.com/blog/?p=105#codesyntax_1

您可以在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM