有谁知道我是否应该可以在预选赛中使用属性占位符作为表达式?我似乎无法正常工作。
我正在使用Spring 3.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:
config.properties service.class=serviceB
这可行。如果仅使用默认的spring bean名称,则可以省略服务名称。serviceA与ServiceA等
@Controller class MyController { @Autowired(required=false) @Qualifier("Service") Service service; public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("app-ctx.xml", MyController.class); for(String s:context.getBeanDefinitionNames()){ System.out.println(s); for(String t:context.getAliases(s)){ System.out.println("\t" + t); } } context.getBean(MyController.class).service.print(); } } public interface Service { void print(); } @Service(value="ServiceA") public class ServiceA implements example.Service { public void print() { System.out.println("printing ServiceA.print()"); } } @Service(value="ServiceB") public class ServiceB implements example.Service { public void print() { System.out.println("printing ServiceB.print()"); } }
<beans> <alias name="${service.class}" alias="Service"/> <context:property-placeholder location="example/app.properties"/> <context:component-scan base-package="example"/> <beans>
Props:
service.class=ServiceB