我有以下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'
不确定我为什么会收到此错误?
答案 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");
}
}
}