2016-05-13 2 views
0

Подход 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); 
     ..... 
    } 
} 

Не могли бы вы помочь мне, какой подход лучше в соответствии с производительностью и потреблением памяти.

ответ

0

Если вы не настроите его явно, все весенние бобы singleton, это не повлияет на память! http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes

Первый подход легко перейти, рекомендуется!

Второй подход является абсолютно ненужным, если вы хотите, вы всегда можете autowire applicationContext и использовать applicationContext.getBean(Mybean.class)

Если вы должны save некоторую память о запуске приложения, вы можете посмотреть на @Lazy, но из моего Точка зрения тоже не нужна.