如果Controller有一个@Controller注释,那么对于没有组件扫描的Spring来说,这应该不够吗?

时间:2010-09-04 21:01:02

标签: java spring spring-mvc

According to the Spring docs,要启用带注释的控制器的自动检测,请在组件中添加组件扫描:

<context:component-scan base-package="org.springframework.samples.petclinic.web"/>

我的问题是,为什么这有必要?

如果一个控制器有一个注释已经指明它是什么,那么对于没有组件扫描的Spring来说,这应该不够吗?

3 个答案:

答案 0 :(得分:5)

Spring怎么会找到这些课程?如果你还没有告诉Spring查看某个类或包,那些类就不会被加载,而Spring永远不会找到它们。

这更像是java类加载模型的限制(如果你可以称之为限制),那么它就是Spring的限制。

答案 1 :(得分:3)

您只需在配置中添加以下内容:

&LT;上下文:注解的配置/&GT;

如果只将注释放在类上,框架必须加载所有类以检查注释是否存在。

要最大限度地减少此开销,您必须在配置中添加annotation-config标记。这样,框架就知道必须检查该配置中的类。

您可以通过使用“base-package”属性指定带注释类的包来帮助框架。

// // EDIT

这也解释了the documentation中的注释:

  

注意

     

&LT;上下文:注解的配置/&GT;只要   在bean中查找bean上的注释   相同的应用程序上下文   被定义为。这意味着,如果你   投入一个   WebApplicationContext for a   DispatcherServlet,它只检查   控制器中的@Autowired bean,   而不是你的服务。

答案 2 :(得分:1)

简单地使用@Controller注释类并不一定意味着您希望它成为Spring上下文的一部分。想象一下,如果该类是另一个应用程序的一部分,或者是第三方库的一部分,或者是系统中不赞成的组件,等等。仅仅因为它位于类路径上并不一定意味着您希望它自动实例化为bean你的春天语境。