Моего curent проект имеет две услуги:Как использовать @Autowired bean в суперклассе?
@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
боб в родительском классе. У меня есть два решения:
- изменение
private OtherService otherService
доprotected OtherService otherService
. Но мышлениеprotected
с@Autowired
bean is not good practice? - добавить
@Autowried private OtherService otherService;
вChildService
Что лучше или любое предложение в этом случае?
обе похоже прекрасный. Я бы пошел с 2, но это всего лишь вопрос. –
добавить публичный/защищенный геттер для 'OtherService' – Leon
Я очень обескураживаю душевное состояние 1. Поскольку скрытие атрибута затрудняет чтение кода. Фактически, я бы написал getter для атрибута и ввел атрибут в конструктор, а не сам вставлял сам атрибут (каждый раз, когда вы autowire атрибут, тест Unit умирает ...). – Turing85