SpringMVC控制器范围问题
嘿,我是Spring MVC的新手,我需要一些建议/澄清。 目前,我正在实现一个MVC应用程序,我正在与我的控制器的范围作斗争。 我通过SpringMVC控制器范围问题,spring,spring-mvc,scope,Spring,Spring Mvc,Scope,嘿,我是Spring MVC的新手,我需要一些建议/澄清。 目前,我正在实现一个MVC应用程序,我正在与我的控制器的范围作斗争。 我通过 这是一种非常舒适的方式 控制器(默认情况下或以上述方式扫描)与普通bean一样是单例的,这是正确的吗?如果是这样,控制器的所有MemberVariable都在多个请求之间共享,对吗?我能换这个吗?我想要请求范围的控制器。就像: <bean id="infoController" class="controller.InfoController" sco
这是一种非常舒适的方式
控制器(默认情况下或以上述方式扫描)与普通bean一样是单例的,这是正确的吗?如果是这样,控制器的所有MemberVariable都在多个请求之间共享,对吗?我能换这个吗?我想要请求范围的控制器。就像:
<bean id="infoController" class="controller.InfoController" scope="request">
<constructor-arg ref="sessionFactory"/>
</bean>
将我的控制器声明为bean是否有任何副作用?还是绝对不能这样宣布?或者甚至将它们声明为请求范围?
我能把这两种方法结合起来吗?比如:
<context:component-scan base-package="controller" scope="request"/>
你们是如何实现控制器并使其“请求保存”的?请参阅以下内容以获得良好的总结: 我从来没有找到任何理由考虑在我的控制器中有成员变量。 请注意,您的控制器通常应该是请求处理的薄包装器。然后,应该将逻辑委托给服务,该服务可能会调用存储库/DAO。然后,应该避免将会话工厂直接传递给控制器,并在服务层定义事务
@Controller
public class MyController{
@Autowired
private MyService service;
public String handlePost(){
service.saveEntity(...);
return "success";
}
}
@Service
public class MyService{
@Autowired
private MyRepository repository;
@Transactional
public void saveEntity(Entity e){
repository.save(e);
}
}
@Repository
public class MyRepository{
public void save(Entity e){
.....
}
}
参见这里的示例(也使用Spring数据,它减少了JPA/Hibernate周围的大量锅炉板代码)
这里也是一样,我不知道控制器需要状态的明显情况。作为一个组件,它具有依赖性。我真的很想看到这种情况好的谢谢你的解释。。。我不知道控制器只是一个包装器,您应该调用一个服务来完成所有逻辑。似乎我必须对服务和DAO层进行一些调查。也许我仍然不理解上面的代码,但是如果我在控制器中自动连接服务。。。不是每个请求都有相同的服务实例吗?不是每个请求都应该有一个服务实例吗?你是对的。默认情况下,服务将是一个单例服务,只要它是线程安全的,就可以了。