Let's consider the following example:
import java.util.Map;
import java.util.Optional;
class Scratch {
private static class UserService {
private final Map<String, String> users = Map.of(
"user1", "Max",
"user2", "Ivan",
"user3", "Leo");
public Optional<String> findUserById(String userId) {
return Optional.ofNullable(users.get(userId));
}
}
public void doJobs() {
// I need to get `userService` here, without explicitly passing it
// to execute some service method
// getUserService().findUserById("userId");
}
public void startApplication() {
UserService userService = new UserService();
doJobs();
}
public static void main(String[] args) {
Scratch program = new Scratch();
program.startApplication();
}
}
So. we have simple java application without any frameworks, like spring. I need to find UserService object in doJobs() method, without explicitly passing it. Obviously, it is job interview question.
There are the following task preconditions:
UserServiceis not a spring bean or something like this. It is not aboutDI- You cannot explicitly pass
UserServiceobject todoJobs()method - You cannot set
UserServiceobject to some static/global variable/interface/method. - You cannot use javaagents.
- You know, that there is only one object of
UserServicein current class loader. - You may use any reflection (included libraries), if you wish
So, generally speaking we need to get somehow list of all objects and find needed one, using knowledge about Class name.
I did not solve this task on job interview. Could you help me to do it?
Aucun commentaire:
Enregistrer un commentaire