- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在关注有关 Spring MVC 的教程,但我无法理解 @ComponentScan
的某些内容即使在阅读了 spring API 文档之后也可以进行注释,所以这里是示例代码:
配置 View Controller
package com.apress.prospringmvc.bookstore.web.config;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
// Other imports ommitted
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.apress.prospringmvc.bookstore.web" })
public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {
// Other methods ommitted
@Override
public void addViewControllers(final ViewControllerRegistry registry) {
registry.addViewController("/index.htm").setViewName("index");
}
}
基于注解的 Controller
package com.apress.prospringmvc.bookstore.web;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class IndexController {
@RequestMapping(value = "/index.htm")
public ModelAndView indexPage() {
return new ModelAndView("index");
}
}
我的问题是,对于 View Controller ,通过添加
@Configuration
和
@ComponentScan(basePackages = { "com.apress.prospringmvc.bookstore.web" })
,在后台会做什么?请问包
com.apress.prospringmvc.bookstore.web
为这些 View Controller 提供一些东西?
最佳答案
简单地说——@ComponentScan
告诉 Spring 你在哪些包中注释了应该由 Spring 管理的类。因此,例如,如果您有一个使用 @Controller
注释的类它位于 Spring 未扫描的包中,您将无法将其用作 Spring Controller 。
用 @Configuration
注释的类是一种使用注解而不是 XML 文件配置 Spring 的新方法(称为 Java 配置)。 Spring 需要知道哪些包包含 Spring bean,否则您必须单独注册每个 bean。就是这样 @ComponentScan
是用来。
在您的示例中,您告诉 Spring 该包 com.apress.prospringmvc.bookstore.web
包含应该由 Spring 处理的类。然后 Spring 找到一个用 @Controller
注释的类, 并对其进行处理,这导致所有请求都到达 /index.htm
被 Controller 拦截。
当请求被拦截时,Spring 需要知道向调用者发送什么响应。由于您返回 ModelAndView
的实例,它将尝试找到一个名为 index
的 View (JSP 页面)在您的项目中(详细信息取决于配置的 View 解析器),并将其呈现给用户。
如果 @Controller
注释不存在,或者 Spring 没有扫描该包,所有这一切都是不可能的。
关于java - 如何理解 Spring @ComponentScan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28963639/
我看到我们有 @org.springframework.context.annotation.ComponentScans 和 @org.springframework.context.annotat
我想向我的 Spring WebApplicationContext 添加一个特定的 Controller 类。我遇到了以下示例:(它是 Scala 中的,但改编自此处: using Componen
场景复现 为了统一定制一个过滤器(Filter),所以在另外一个工程里面创建了一个过滤器,并通过jar包的方法导入当前项目,通过@ComponentScan({"org.example.
我为我的 Spring Application Context 进行了以下设置. @Configuration public class RmiContext { @Bean public R
我正在使用注释设置一个非常小的带有 Boot 的 Spring/REST/JPA 项目。 当我将 JPA 存储库类移到不同的包并在其包上调用 componentscan 时,我在具有 Autowire
我正在使用 Java 11 和 Spring 开发 JavaFX 应用程序。应用程序模块使用 jlink 与自定义 JRE 捆绑在一起,它只允许命名模块包含在 bundle 中。由于 Spring 不
我想找到以编程方式设置“@componentScan”的“basepackages”的方法。 我有这样的东西: @Configuration @EnableWebMvc @ComponentScan(
在我的 Spring Boot 项目中,我必须使用一个外部库,它在 Spring 上下文中定义了 beans。因此,在我的应用程序类中,我在下面添加了我的项目和外部库的基础包, @SpringBoot
@ComponentScan( //CS1 basePackages = {"com.package.A", "com.package.B"}, excludeFilters = @
@ComponentScan 将为您提供包中所有带有 @Component 注释的类的列表(或 @Service/@Repository).为此,我想他们使用反射来枚举包中的所有类并找到带有该注释的类
我的课上有以下 spring header @Service @EnableAutoConfiguration(exclude = {HibernateJpaAutoConfiguration.cla
我对 Spring 比较陌生,并且正在学习一些示例。 在其中一个示例中,我注意到 Spring 没有将 URI 映射到方法。 我发现我将 @ComponentScan 注释放在错误的配置类上并解决了我
我正在关注有关 Spring MVC 的教程,但我无法理解 @ComponentScan 的某些内容即使在阅读了 spring API 文档之后也可以进行注释,所以这里是示例代码: 配置 View C
我不知道如何在测试中排除配置(例如 described here )。我真正想要的是忽略 @WebMvcTest 中的配置,但即使下面的更简单的示例对我来说也不起作用: @ExtendWith(Spr
我有包裹一: xxx.yyy.zzz { SampleClass1.java } 和包二: xxx.yyy.zzz { SampleClass2.java } 并打包三个: aaa.bbb.ccc
“context:componentscan”可以扫描自定义注释吗?如果是这样,扫描后它会将扫描的 bean 存储在应用程序上下文中的什么位置?我如何访问结果? 最佳答案 我们在 XML 配置文件中注
我遇到了 @ComponentScan @Configuration 的问题测试类——即 @ComponentScan无意中拉入 @Configuration在集成测试期间。 例如,假设您在 src/
我有带有包布局的 spring boot 应用程序示例: main: -com.foo Application.java -com.foo.services Item
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭 7 年前。 Improve
我想在 Spring 中从基于 XML 的配置切换到基于 Java 的配置。现在我们的应用程序上下文中有这样的东西: 但是如果我写这样的东西...... @ComponentScan
我是一名优秀的程序员,十分优秀!