方法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);
.....
}
}
根据性能和内存消耗情况,请你帮我解决哪种方法更好。
答案 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
,但从我的角度来看,它也没有必要。