Подход 1:Spring MVC Repository Factory
Ниже приведены два класса обслуживания, которые используют одни и те же 2 репозиториев.
@org.springframework.stereotype.Service(value = "userService")
public class UserServiceImpl implements UserService {
@Autowired
private CounterRepository counterRepository;
@Autowired
private SessionRepository sessionRepository;
}
@org.springframework.stereotype.Service(value = "projectService")
public class UserServiceImpl implements UserService {
@Autowired
private CounterRepository counterRepository;
@Autowired
private SessionRepository sessionRepository;
}
Таким образом, в этих классах, как вы видите, что CounterRepository & SessionRepository используют два раза каждый в UserServiceImpl & ProjectServiceImpl услуг.
Это правильный подход, или я могу сделать один заводской класс и использовать его для получения требуемого репо.
подход 2:
class RepoFactory{
@Autowired
private CounterRepository counterRepository;
@Autowired
private SessionRepository sessionRepository;
public <T> T getRepo(Class<T> entityClass) {
if (entityClass == CounterRepository .class) {
return (T) appMessageRepository;
} else if (entityClass == SessionRepository.class) {
return (T) auditTrailRepository;
}
}
И я использую, как показано ниже
@org.springframework.stereotype.Service(value = "userService")
public class UserServiceImpl implements UserService {
@Autowired
private RepoFactory repoFactory;
public void someMethod(){
repoFactory.getRepo(CounterRepository.class);
.....
}
public void someMethod2(){
repoFactory.getRepo(SessionRepository.class);
.....
}
}
@org.springframework.stereotype.Service(value = "projectService")
public class ProjectServiceImpl implements ProjectService {
@Autowired
private RepoFactory repoFactory;
public void someMethod(){
repoFactory.getRepo(CounterRepository.class);
.....
}
public void someMethod2(){
repoFactory.getRepo(SessionRepository.class);
.....
}
}
Не могли бы вы помочь мне, какой подход лучше в соответствии с производительностью и потреблением памяти.