JavaSpring限定符和属性占位符
有人知道我是否应该能够在限定符中使用属性占位符作为表达式吗?我好像没法让它工作
我正在使用Spring3.0.4
@Controller
public class MyController {
@Autowired
@Qualifier("${service.class}")
Service service;
}
@Service
@Qualifier("ServiceA")
ServiceA implements Service {
public void print() {
System.out.println("printing ServiceA.print()");
}
}
@Service
@Qualifier("ServiceB")
ServiceB implements Service {
public void print() {
System.out.println("printing ServiceB.print()");
}
}
XML:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:/etc/config.properties"/>
</bean>
配置。特性:
config.properties
service.class=serviceB
# 1 楼答案
我冒昧地猜测答案是否定的,只是基于几个javadoc页面中的评论。例如,请参见
@Value
的文档:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/beans/factory/annotation/Value.html
请注意,它们特别提到在注释中使用表达式。为了比较
@Qualifier
的文档:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/beans/factory/annotation/Qualifier.html
没有提到表达方式。显然,这不是一个明确的答案(但spring在文档方面通常非常优秀)。另外,如果表达式在
@Qualifier
注释中受支持,我希望它们的工作方式与@Value
注释相同(只是基于spring是一个非常一致的框架)Spring3.1有一个新的ProfileBean特性,它似乎可以完成一些您正在尝试做的事情。以下是对此的一篇评论:
http://blog.springsource.com/2011/02/14/spring-3-1-m1-introducing-profile/
# 2 楼答案
这很有效。如果只使用默认的Springbean名称,则可以省略服务名称。服务A对服务A等
XML:
道具:
# 3 楼答案
此解决方案不使用XML,也不使用属性文件
你的课程提高了:
MyController.java
:ServiceA.java
:ServiceB.java
:application.properties
(您可以在此处更改将加载的类):和重要配置文件
AppConfig.java
:其他解释:
@Qualifier
。对于服务,要指定bean名称,请使用@Service
李>@Service
与specyify名称一起使用。例如,ServiceA的标准bean名称是serviceA
(而不是ServiceA
-请看大的第一个字母),因此@Service("serviceA")
冗余(@Service
就足够了)李># 4 楼答案
作为工作区,您可以根据配置中的名称设置所需的Spring服务实现。财产
配置。性质
# 5 楼答案
也许可以试一试: