SpringMVC控制器范围问题

SpringMVC控制器范围问题,spring,spring-mvc,scope,Spring,Spring Mvc,Scope,嘿,我是Spring MVC的新手,我需要一些建议/澄清。 目前,我正在实现一个MVC应用程序,我正在与我的控制器的范围作斗争。 我通过 这是一种非常舒适的方式 控制器(默认情况下或以上述方式扫描)与普通bean一样是单例的,这是正确的吗?如果是这样,控制器的所有MemberVariable都在多个请求之间共享,对吗?我能换这个吗?我想要请求范围的控制器。就像: <bean id="infoController" class="controller.InfoController" sco

嘿,我是Spring MVC的新手,我需要一些建议/澄清。 目前,我正在实现一个MVC应用程序,我正在与我的控制器的范围作斗争。 我通过
这是一种非常舒适的方式

控制器(默认情况下或以上述方式扫描)与普通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层进行一些调查。也许我仍然不理解上面的代码,但是如果我在控制器中自动连接服务。。。不是每个请求都有相同的服务实例吗?不是每个请求都应该有一个服务实例吗?你是对的。默认情况下,服务将是一个单例服务,只要它是线程安全的,就可以了。