如何在超类中重用@Autowired bean?

时间:2016-10-14 14:09:29

标签: java spring oop autowired

我的复杂项目有两项服务:

@Service
public class OtherService{
}

interface IService{
    void methodA();
    void methodB();
    void methodC();
}

@Service
public class DefaultService implement IService{

    @Autowried
    private OtherService otherService;

    public void methodA(){...};
    public void methodB(){...};
    public void methodC(){...};
}

实施其他功能时,我添加了新的业务流程:

  • 想要重用methodA,methodB
  • 在新流程中运行methodC时添加新规则

所以我的解决方案是创建new ChildService extends DefaultService并覆盖methodC

@Service
public class ChildService extends DefaultService{

    @override               
    public void methodC(){
        //want to use some method of otherService
    }
}

问题是methodC想在父类中使用otherService bean。我有两个解决方案:

  1. private OtherService otherService更改为protected OtherService otherService。但用protected bean思考@Autowired不是一个好习惯吗?
  2. @Autowried private OtherService otherService;添加到ChildService
  3. 对于这种情况有什么好处或任何建议?

1 个答案:

答案 0 :(得分:1)

编辑。

将OtherService的访问说明符更改为protected或提供 DefaultService中的protected getOtherService()方法。