我有以下情况:
public interface ServiceAura extends Serializable { }
@Service
public class ServiceA implements ServiceAura {
....
}
@Service
public class ServiceB implements ServiceAura {
....
}
现在从控制器中,我需要分别调用它们:
@Path("")
@Controller
public class ServiciosAuraPortalRESTfulService {
@Autowired
private ServiceAura srvA;
@Autowired
private ServiceAura srvB;
}
我已经阅读了有关@Qualified的信息,这是唯一的方法吗?我该如何存档?
答案 0 :(得分:3)
您是对的。您可以使用@Qualifier("ServiceA")
指定要自动装配的实现。
@Path("")
@Controller
public class ServiciosAuraPortalRESTfulService {
@Autowired
@Qualifier("ServiceA")
private ServiceAura srvA;
@Autowired
@Qualifier("ServiceB")
private ServiceAura srvB;
}
在服务本身上,您可以使用注释@Primary
指定所需的默认实现。
或者,您可以使用应用程序上下文来检索特定的bean。您需要自动连接ApplicationContext
类,然后使用ServiceAura srvA = context.getBean(ServiceA.class);
答案 1 :(得分:2)
有两种方法可以做到这一点。 第一种方法是使用@Qualifier注解。
@Path("")
@Controller
public class ServiciosAuraPortalRESTfulService {
@Autowired
@Qualifier("serviceA")
private ServiceAura srvA;
@Autowired
@Qualifier("serviceB")
private ServiceAura srvB;
}
您的服务应这样定义:
@Service
@Qualifier("serviceA")
public class ServiceA implements ServiceAura {
....
}
@Service
@Qualifier("serviceB")
public class ServiceB implements ServiceAura {
....
}
另一种方法是创建扩展接口ServiceAura
interface ServiceAInterface extends ServiceAura {
}
class ServiceA implements ServiceAInterface {}
.... // the same for service B
然后在代码中:
public class ServiciosAuraPortalRESTfulService {
@Autowired
ServiceAInterface serviceA;
}