Spring 使用@Value将属性注入构造函数,SpelEvaluationException:EL1008E(4.1.6)
我读了一篇关于facebook认证的帖子 他使用autowired向构造函数注入3个参数。这给了我特殊的例外 在我的项目中,我在/src下添加了一个config.properties/ facebook.clientId=237473571343 facebook.clientSecret=9iuwijig[sa[w90u2tjgjgj] application.host= 以及构造器Spring 使用@Value将属性注入构造函数,SpelEvaluationException:EL1008E(4.1.6),spring,spring-annotations,spring-el,spring-java-config,Spring,Spring Annotations,Spring El,Spring Java Config,我读了一篇关于facebook认证的帖子 他使用autowired向构造函数注入3个参数。这给了我特殊的例外 在我的项目中,我在/src下添加了一个config.properties/ facebook.clientId=237473571343 facebook.clientSecret=9iuwijig[sa[w90u2tjgjgj] application.host= 以及构造器 @Controller public class FacebookSpringSocialAuthentica
@Controller
public class FacebookSpringSocialAuthenticator {
public static final String STATE = "state";
private String applicationHost;
private FacebookConnectionFactory facebookConnectionFactory;
@Autowired
public FacebookSpringSocialAuthenticator(
@Value("#{properties['facebook.clientId']}")
String clientId,
@Value("#{properties['facebook.clientSecret']}")
String clientSecret,
@Value("#{properties['application.host']}")
String applicationHost) {
this.applicationHost = applicationHost;
facebookConnectionFactory =
new FacebookConnectionFactory(clientId, clientSecret);
}
}
在搜索和阅读讨论和文档之后,我仍然不知道该怎么办
@Value
注释中,您使用的是SpEL表达式。在您的示例中,它将查找名为Properties
的Map
或Properties
对象,并尝试使用键facebook.clientId
查找属性
要使其工作,您需要添加以下内容
<util:properties id="properties" location="config.properties" />
那么您的@值可以是
@Value("${facebook.clientId}")
这样做的另一个好处是,您还可以使用系统或环境属性进行一些配置(或覆盖部分配置)。刚刚测试过,facebook给了我无效的应用程序id${facebook.clientId},所以从#到$的更改不起作用。我想我缺少了一些东西,spring无法将我的属性文件识别为bean。如果您没有*占位符配置器
,则什么都不会发生,也只是在无法加载属性文件的情况下将其加载。向我们展示一些配置。如果您使用maven,该文件也应该在src/main/resources
而不是在src
中。你是对的,我认为我没有占位符配置器,我的代码在添加到servlet.xml后可以工作。但是我不知道util:properties和占位符配置器之间的区别,它们是相同的吗?不,它们不是,并且不应该与之一起工作,除非你将其命名为properties
。您应该改用
。数字答案是正确的。不知道如何使其成为答案。
<context:property-placeholder location="config.properties" />
@Value("${facebook.clientId}")