Ссылка на Spring Bean не работает - PullRequest
0 голосов
/ 22 мая 2018

У меня есть следующий компонент:

  package com.test;
  @Component
  public class Sample{

      String modified = null;

      @Value("${url}")
      private String url;

      public Sample(){
       System.out.println(url );
        if(baseUrl.equals(""){
            throw new RuntimeException("missing");
         }
        else{
           modified = "test"+url;
        }
      }
    }

Я добавил:

<context:annotation-config />
    <context:property-placeholder location="classpath:test.properties"/> &    <context:component-scan base-package="com.test"/> 

и пытаюсь получить доступ к «измененному» полю, как показано ниже

  <bean id="url" class="java.lang.String">
        <constructor-arg value="#{sample.modified}" />
    </bean>

в контексте моего приложения.Но я продолжаю получать следующую ошибку:

Field or property 'sample' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'

Не уверен, почему я получаю эту ошибку?

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

JustinKSU ответ правильный.У вас есть другой вариант: ввести значение через конструктор, используя @Autowired:

@Component
public class Sample {

  @Autowired
  public Sample(@Value("${url}") String url) {
    System.out.println(url);
    if(url.equals("") {
      throw new RuntimeException("missing");
    }
  }

}
0 голосов
/ 22 мая 2018

Когда Spring создает объект, он использует конструктор по умолчанию.Он не может установить свойство, пока не построит его.Вместо того, чтобы иметь то, что у вас есть, попробуйте это, чтобы увидеть, если значение устанавливается.

  @PostConstruct
  public void init(){
   System.out.println(url );
    if(baseUrl.equals(""){
        throw new RuntimeException("missing");
     }
  }
...