Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSpring3.0MVC注释与COC。Java社区中首选的方法是什么?_Java_Spring Mvc - Fatal编程技术网

JavaSpring3.0MVC注释与COC。Java社区中首选的方法是什么?

JavaSpring3.0MVC注释与COC。Java社区中首选的方法是什么?,java,spring-mvc,Java,Spring Mvc,我将Spring的MVC框架用于我在谷歌应用程序引擎上托管的应用程序。到目前为止,我的控制器是通过@Controller注释注册的;然而,在进入Spring之前,我评估了ASP.NETMVC2,它不需要配置,并且基于约定。在Java社区中,使用Spring实现MVC时,约定优先于配置(COC)是当前首选的方法吗?此外,这可能是由于我目前知识有限,但我注意到,如果我通过ControllerClassNameHandlerMapping使用COC方法,我只能实例化我的控制器所需的构造函数注入。例如,

我将Spring的MVC框架用于我在谷歌应用程序引擎上托管的应用程序。到目前为止,我的控制器是通过@Controller注释注册的;然而,在进入Spring之前,我评估了ASP.NETMVC2,它不需要配置,并且基于约定。在Java社区中,使用Spring实现MVC时,约定优先于配置(COC)是当前首选的方法吗?此外,这可能是由于我目前知识有限,但我注意到,如果我通过
ControllerClassNameHandlerMapping
使用COC方法,我只能实例化我的控制器所需的构造函数注入。例如,如果我使用
DefaultAnnotationHandlerMapping
,以下控制器bean配置将失败

<bean id="c" class="com.domain.TestController">
  <constructor-arg ref="service" />
</bean>
<bean id="service" class="com.domain.Service" />

如果我使用
ControllerClassNameHandlerMapping
/COC,我的
com.domain.TestController
控制器工作正常,但当我使用
DefaultAnnotationHandlerMapping
/Annotations时,它会导致错误

为了澄清,如果我将
@Autwired
注释添加到构造函数中,我可以让构造函数注入工作,但是如果我这样做,我必须删除
@RequestMapping
注释,否则我将得到一个错误,说明控制器多次映射到URL。一些在线研究表明,
ControllerClassNameHandlerMapping
正在加载我的控制器并将其映射到URL,即使我有
在我的配置文件中


老实说,我可以克服这些问题。我真的只想知道哪种方法,注释或COC,是更好的投资。

棘手的问题;这有点主观,真正取决于您的个人偏好或开发团队的共识。我个人喜欢注释,因为我觉得它更灵活。如果您必须遵循约定才能让框架“自动”完成工作,那么无论框架开发人员决定采用什么约定,您都会被卡住(当然,这通常不是一个坏约定,但您会被卡住)。在我使用Spring的时候(2年左右),我们的团队似乎总是开始使用COC,但后来才意识到,典型的大会并不能真正满足我们的需求

我还觉得注释可以提高代码的可读性。当查看带注释的类时,我可以理解它做什么以及如何做,而无需引用应用程序上下文

至于第二个问题(将bean注入控制器),这里有一些代码来说明我通常如何连接控制器

web-servlet.xml

<context:component-scan base-package="com.test.web.controllers" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
TestDAO将具有以下类声明:

@Repository("myTestDAO")
public class TestDAO {

我通常不使用构造函数连接,因为这通常更简单,但如果您需要构造函数连接,我可以发布一个例子。

当使用默认注释handlermapping时,您必须在controller方法上设置扫描基础和
RequestMapping
。你在这么做吗?是的。当我使用默认的注释handlermapping时,除了需要构造函数注入的控件之外,一切都正常。
@Repository("myTestDAO")
public class TestDAO {