在Spring Controller

时间:2016-03-18 13:54:43

标签: spring spring-mvc spring-4

我正在开发一个基于Struts 1.x的项目,将其转换为Spring 4.我访问了很多教程站点并阅读了Spring 4教程但没有人使用@Scope注释{{1}在教程应用程序中。我的问题是:

1)是否必须使用@Controller属性?

2)如果我们不使用怎么办?

3)将@Scope@Scope一起使用是不错的做法?

我们还在服务器启动时读取属性文件并将其存储到Property类中。我正在阅读DAOImpl类中的一些属性(注释为@Controller)。如果我对Controller和Repository都使用@Repository属性,则返回值,否则返回@Scope。为什么会出现这种情况?

2 个答案:

答案 0 :(得分:0)

  

1)是否必须使用@Scope属性?

没有。如果您需要默认值("singleton"),则无需指定。

  

2)如果我们不使用怎么办?

然后你的应用程序只会创建一个bean实例。

  

3)将@Scope@Controller一起使用是不错的做法?

没有。对于具有多个控制器类(或存储库)实例的应用程序没有意义。如果您需要同时使用两个注释,那么您就不会很好地对类进行建模。

  

为什么会出现这种情况?

因为如果目标bean没有在该范围内构造,上下文无法创建要注入的作用域bean(例如,尝试将请求范围的bean注入到在请求的上下文之外创建的bean中)。

要解决此问题,您需要使用范围代理,方法是设置proxyMode

但是,在您的具体情况下,解决方案是您实际上并不需要非默认范围。

答案 1 :(得分:0)

@ Scope-不是必须与@Controller一起使用,除非你需要根据你的要求。 @Scope定义bean的范围,默认为单例。 而且,Property Class应该由Spring管理,否则它会给你一个例外。