Spring MVC Repository Factory

时间:2016-05-13 08:58:46

标签: spring spring-mvc dependency-injection autowired

方法1:

以下是使用相同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);
       .....
    }
}

根据性能和内存消耗情况,请你帮我解决哪种方法更好。

1 个答案:

答案 0 :(得分:0)

如果你没有明确地配置它,那么所有的spring bean都是singleton,它根本不会影响内存! http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes

第一种方法很容易,推荐!!

第二种方法完全没必要,如果您愿意,您可以随时自动装配applicationContext并使用applicationContext.getBean(Mybean.class)

如果您在应用程序启动时需要save一些内存,可以查看@Lazy,但从我的角度来看,它也没有必要。