Spring bean引用不起作用

时间:2018-05-22 15:41:30

标签: java spring spring-mvc spring-annotations

我有以下bean:

  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 :(得分:2)

当Spring创建对象时,它使用默认构造函数。它不能在构造它之前设置属性。而不是你拥有的,试试看是否正在设置值。

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

答案 1 :(得分:0)

JustinKSU的回答是对的。您还有另一种选择:使用@Autowired

通过构造函数注入值
@Component
public class Sample {

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

}