2016-05-13 65 views
0

方法1:Spring MVC的倉庫廠

下面是其使用的是相同的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

第一種方法很容易去,推薦!

第二種方法是完全不必要的,如果你願意,你可以隨時自動裝配applicationContext和使用applicationContext.getBean(Mybean.class)

如果您有save在應用程序啓動一些內存,你可以看看@Lazy,但是從我觀點來看,這也沒有必要。