I have a parent class that is not managed by Spring which has multiple @Component's inherited from it:
public class Parent {
  public void commonMethod(SomeObj obj) {
    //...
  }
}
@Component
public class ChildA extends Parent {
  public MyObj doSomething(/*...*/) {
    // Some external call
    commonMethod(obj);
  }
}
@Component
public class ChildB extends Parent {
  public MyObj doSomething(/*...*/) {
    // Some external call
    commonMethod(obj);
  }
}
Now I need to call a Spring managed @Service from the Parent class. Of course, since Parent is not a Spring-managed bean, I was thinking to do something like:
@Service
public class SomeServiceImpl implements SomeService {
  public void serviceWork(MyObj obj) {
    // Some static method call
  }
}
public class Parent {
  private SomeService someService;
  public Parent(SomeService someService) { this.someService = someService; }
  public void commonMethod(MyObj obj) {
    someService.serviceWork(obj);
    //...
  }
}
@Component
public class ChildA extends Parent {
  public ChildA(@Autowired SomeService someService) { super(someService); }
  
  public MyObj doSomething(/*...*/) {
    // Some external call
    commonMethod(obj);
  }
}
@Component
public class ChildB extends Parent {
  public ChildA(@Autowired SomeService someService) { super(someService); }
  public MyObj doSomething(/*...*/) {
    // Some external call
    commonMethod(obj);
  }
}
My question is, is this thread safe? Second, is there a better design for this since now I have to @Autowired SomeService and pass it to Parent's constructor for every child class.
Can I make the Parent class a Spring-managed class? Would that cause any issues since now it becomes a singleton class that's being shared among all the children?