这可行。如果仅使用默认的spring bean名称,则可以省略服务名称。serviceA与ServiceA等
@Controllerclass 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()"); } }XML:
<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



