Прежде всего вы должны удалить циклическую зависимость здесь.Одно из предложений - удалить private Interface behaviour ;
из класса Controller и вызвать doBehaviour
где-нибудь за пределами класса Controller.
И как только вы закончите с этим, вы можете перейти к Autowiring.Основное для Autowire, контексту Spring нужен bean-компонент этого конкретного типа класса.Есть несколько способов сделать это в соответствии с вашим классом, вы можете просто поставить
@Component
class Controller {
@ Component annotion.
Примечание: в вашем классе приложения должен быть @ComponentScan("relevant.package")
, указывающий контекст весны, где найти ваши бины.
И как только вы создали свой бин, тогдаВы можете автоматически подключить его следующим образом:
@Component
class MyCustomBehaviour1 implements IBehaviour {
// instance of controller
private Controller cntrlInstanceToUseData;
@Autowired
public MyCustomBehaviour (Controller ctrlInst){
this.cntrlInstanceToUseData = ctrlInst;
}
@Override
void doBehaviour(){
System.out.println("Playing with MyCustomBehaviour1 -> " + cntrlInstanceToUseData.getSommeData());
}
}
Теперь вам действительно не нужно создавать объект Controller и объект Behavior. Доступ к doBehaviour следует выполнять где угодно, используя
@Autowire
private IBehaviour myBehaviour
.больше информации, пожалуйста, прочитайте