我正在开发一个基于Struts 1.x的项目,将其转换为Spring 4.我访问了很多教程站点并阅读了Spring 4教程但没有人使用@Scope
注释{{1}在教程应用程序中。我的问题是:
1)是否必须使用@Controller
属性?
2)如果我们不使用怎么办?
3)将@Scope
与@Scope
一起使用是不错的做法?
我们还在服务器启动时读取属性文件并将其存储到Property类中。我正在阅读DAOImpl类中的一些属性(注释为@Controller
)。如果我对Controller和Repository都使用@Repository
属性,则返回值,否则返回@Scope
。为什么会出现这种情况?
答案 0 :(得分:0)
1)是否必须使用
@Scope
属性?
没有。如果您需要默认值("singleton"),则无需指定。
2)如果我们不使用怎么办?
然后你的应用程序只会创建一个bean实例。
3)将
@Scope
与@Controller
一起使用是不错的做法?
没有。对于具有多个控制器类(或存储库)实例的应用程序没有意义。如果您需要同时使用两个注释,那么您就不会很好地对类进行建模。
为什么会出现这种情况?
因为如果目标bean没有在该范围内构造,上下文无法创建要注入的作用域bean(例如,尝试将请求范围的bean注入到在请求的上下文之外创建的bean中)。
要解决此问题,您需要使用范围代理,方法是设置proxyMode
。
但是,在您的具体情况下,解决方案是您实际上并不需要非默认范围。
答案 1 :(得分:0)
@ Scope-不是必须与@Controller一起使用,除非你需要根据你的要求。 @Scope定义bean的范围,默认为单例。 而且,Property Class应该由Spring管理,否则它会给你一个例外。