2016-05-13 7 views
0

アプローチ1:以下Spring MVCのリポジトリ工場

は同じ2つのリポジトリを使用している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回ずつ使用していることを見るように。

これは正しいアプローチか、One Factory Classを作成して必要なレポを取得することができますか?

アプローチ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をautowireし、アプリケーション起動時にいくつかのメモリをsaveする必要がある場合、あなたは@Lazyを見て、私からすることができますapplicationContext.getBean(Mybean.class)

を使用することができ、全く不要です視点は、それも必要ではありません。