внедрение метода статического сеттера в Spring - PullRequest
0 голосов
/ 07 января 2011

У меня есть следующее требование. Я хотел передать значение http:\\localhost:9080\testws.cls в качестве заданного значения через файл конфигурации пружины.Как я могу сделать эту статическую переменную инъекцию для 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);
    }

}

Пожалуйста, помогите мне.

Ответы [ 4 ]

4 голосов
/ 08 января 2011

Spring не может инициализировать статическое конечное поле извне.

Это просто невозможно. Статические конечные поля инициализируются во время загрузки класса, задолго до того, как Spring сможет что-либо сделать (и вы все равно не сможете передать параметры в ClassLoader).

Вам придется переосмыслить свой дизайн. Это не может работать!

1 голос
/ 13 июля 2012
@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

1 голос
/ 08 января 2011

Вы можете настроить его для экземпляра компонента.

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;
    }

Конечно, поле будет недоступно до тех пор, пока не будут установлены свойства всех компонентов, но в Spring есть некоторыеинтерфейсы для этого.InitializingBean например.

0 голосов
/ 08 января 2011

Как уже упоминалось, Spring не работает таким образом.Статический инициализатор должен быть запущен до того, как Spring сможет повлиять на значение.

Что вы, вероятно, должны сделать, - создать экземпляр класса Code1 в Spring как bean-компонент и установить значение там.Если значение должно быть совместно использовано несколькими экземплярами вашего компонента, то сделайте это значение одноэлементным компонентом в Spring.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...