用 XML 中定义的 bean 覆盖 @Component 定义的 bean



我有一个服务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 中为空)的实现。此类应存在于与 MyServiceImpl(例如项目 1)不同的项目(例如项目 2)中,并且具有已在"pom.xml"中配置的依赖项。

public class RegionalMyServiceImpl extends MyServiceImpl {
method3(){
//Implementation of method3() goes here
}
...
}

每当启动项目 2 时,都应将 RegionalMyServiceImpl 对象传递给构造函数 'MyController'。这个类应该已经定义了方法3的实现,并且也扩展了MyServiceImpl的所有方法。

为了做到这一点,我用类RegionalMyServiceImpl配置了"myService"的bean名称。根据我的理解,xml中的bean定义应该覆盖通过注释@Component构造的bean,每当我启动项目2时,myService的bean实际上是RegionalMyServiceImpl而不是MyServiceImpl

<bean id="myService" class="com.demo.RegionalMyServiceImpl"></bean>

这应该有效吗?有没有更好的方法?

您可以在控制器中执行此操作:

@Autowired
@Qualifier("RegionalMyServiceImpl")
private MyService myService;

并编辑 Bean 定义:

<bean name="RegionalMyServiceImpl" class="com.demo.RegionalMyServiceImpl"></bean>

相关内容

  • 没有找到相关文章

最新更新