我有一个服务MyService。在我的控制器中,MyController我注入了这样的服务:
@Controller("myController")
@RequestMapping("/myController/dcb")
public class MyController{
...
@Autowired
private MyService myService;
...
}
以下是服务定义:
public interface MyService{
method1();
method2();
}
以下是我通常使用的服务实现。
@Service
@Component("myService")
public class MyServiceImpl implements MyService{
...
@Override
method1(){
//Implementation of method1()
}
@Override
method2(){
//Implementation of method2()
method3();
}
method3(){
//This method is blank here
}
...
}
现在根据需求,我需要使用 MyServiceImpl 的扩展,它将提供method3()(在 MyServiceImpl 中为空)的实现。此类应出现在单独的项目(比如项目2)中,而不是 MyServiceImpl (比如项目1),并且已在&#39; pom.xml&#39;中配置了依赖项。< /强>
public class RegionalMyServiceImpl extends MyServiceImpl {
method3(){
//Implementation of method3() goes here
}
...
}
每当项目2 启动时, RegionalMyServiceImpl 对象应该传递给构造函数&#39; MyController &#39; 。该类应该已经定义了方法3的实现,并且也扩展了MyServiceImpl的所有方法。
为了做到这一点,我通过&#39; myService &#39;配置了bean名称。使用 RegionalMyServiceImpl 类。根据我的理解,xml中的bean定义应该覆盖通过注释 @Component 构造的bean,每当我启动项目2时, myService 的bean实际上都是 RegionalMyServiceImpl ,而不是 MyServiceImpl 。
<bean id="myService" class="com.demo.RegionalMyServiceImpl"></bean>
这应该有用吗?有没有更好的方法呢?
答案 0 :(得分:0)
你可以在控制器中这样做:
@Autowired
@Qualifier("RegionalMyServiceImpl")
private MyService myService;
并编辑bean定义:
<bean name="RegionalMyServiceImpl" class="com.demo.RegionalMyServiceImpl"></bean>