【发布时间】:2016-06-08 08:15:00
【问题描述】:
我有一个服务 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),并且已经在 'pom.xml' 中配置了依赖项。
public class RegionalMyServiceImpl extends MyServiceImpl {
method3(){
//Implementation of method3() goes here
}
...
}
每当project 2启动时,RegionalMyServiceImpl对象应该被传递给构造函数'MyController'。这个类应该已经定义了方法3的实现,并扩展了MyServiceImpl的所有方法。
为了做到这一点,我通过 'myService' 使用类 RegionalMyServiceImpl 配置了 bean 名称。根据我的理解,xml中的bean定义应该覆盖通过注释构造的bean @Component 并且每当我启动项目2时, myService 的bean实际上是RegionalMyServiceImpl 而不是 MyServiceImpl。
<bean id="myService" class="com.demo.RegionalMyServiceImpl"></bean>
这应该有效吗?有没有更好的方法呢?
【问题讨论】:
标签: spring spring-mvc annotations overriding managed-bean