问题标签 [component-scan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
30525 浏览

java - 从另一个项目注入 FeignClient 时出错

我在自动连接另一个项目的假客户端时遇到问题。似乎没有生成和注入 feign 客户端的实现。

这是我得到的错误。

伪装客户端非常简单。为简洁起见,我删除了导入。

我将组件扫描添加到我的项目中,以包含应用程序及其控制器,并将 feign 客户端包含在另一个项目中。

为简洁起见,删除了大部分导入的其余控制器。

我曾尝试在不同的项目和不同的包中定义 feign 客户端接口,并且仅在将其与应用程序放在同一个包中时才看到成功。这让人相信这是一个组件扫描问题,即使我将包包含在扫描中。我想将 feign 客户端接口保留在共享项目中,以定义可重用的“合同”,并让每个项目具有唯一的包结构,而不是使用使用它的应用程序定义 feign 客户端。

谢谢,韦斯。

0 投票
1 回答
1035 浏览

spring - 上下文:组件扫描无法定义

我对 Spring-contex 定义有疑问。当我查看其他遇到此问题的人时,通常是因为使用了错误的模式声明,但我认为我的问题并非如此。

这是xml

我正在使用 Spring-4.1.6

0 投票
1 回答
1143 浏览

spring - Spring Boot:测试和主要之间的 NoUniqueBeanDefinitionException

我有一个 SpringBoot main/Application.java 类

和一个类似的测试

主代码运行正常。测试代码抛出 NoUniqueBeanDefinitionException,似乎没有正确过滤掉不需要的 MySqlRepository 组件。

0 投票
2 回答
3697 浏览

java - 为什么 Spring @Configuration 类继承不能按预期工作?

我有一个包含公共 bean 的抽象 Spring 配置类:

公共 bean 的细节由其子类设置:

...和...

我的测试只需要使用TestConfig并且不应该知道RealConfig(但确实需要访问 中的其他组件realPackage)。它始于:

使用上面的代码,这可以按预期工作并使用"test"细节。但是,如果我颠倒 中的包顺序,@ComponentScan则会"real"使用细节。这让我感到莫名其妙 - 我指定了TestConfig它应该在这个上调用覆盖的方法吗?任何人都可以就 Spring 这样做的原因以及如何解决它提出建议吗?

0 投票
2 回答
20484 浏览

java - SpringBootApplication 在 ComponentScanning 其他 @SpringBootApplications 时排除

我在阻止 Spring Boot 自动配置某些类时遇到了一些困难(在本例中:SolrAutoConfiguration)。为了说明,我设置了一个大大简化的示例:

https://github.com/timtebeek/componentscan-exclusions

实际上,有大约 20 多个内部@SpringBootApplication项目,每个项目都有自己的依赖项。(不理想/不是我的想法,但从现在开始很难摆脱。)

出现问题是因为多个子项目都在使用 Solr 5.2.1,但 Spring Boot 只兼容 4.x。在最终的应用程序(示例中的 module-b)中,我想导入所有@SpringBootApplication模块中的所有类,同时阻止SolrAutoConfiguration运行:

@SpringBootApplication这失败了,因为通过@ComponentScan没有特定排除的任何实例仍然加载SolrAutoConfiguration

组合多个类时,如何正确排除自动配置@SpringBootApplication类?

我已经尝试过使用excludeFilters我的 final @SpringBootApplication,但这还没有导致解决方案。

0 投票
1 回答
1451 浏览

spring - 组件扫描妨碍 bean 初始化?

我在尝试复制一个简单的 spring OAuth 项目 sparklr2 时遇到了这个问题。源代码在这里 https://github.com/spring-projects/spring-security-oauth/tree/master/samples/oauth2/sparklr

源代码运行完美,当我用tomcat调试它时,它会初始化WebMvcConfigurerAdapter中的所有@Bean,包括控制器。但注意到 @ComponentScan() 没有被使用。

然后我创建自己的 MVC 项目,复制几乎 100% 的代码,但我使用的是 WebApplicationInitializer 而不是 AbstractDispatcherServletInitializer。我使用 WebAppllicationInitializer 是因为我只学过这种方式来编写 MVC。

然后我运行项目,@Bean 初始化。然后我用浏览器检查 /login,得到 404。这可能是由于 spring 不知道我有控制器,然后我将 @ComponentScan 添加到我的配置类中,现在 /login 出现了。但奇怪的是,所有与 Controller 相关的 @Bean 都没有初始化。因此,当我对这些控制器调用任何方法时,由于它们的属性未初始化,因此不会给我任何对象或空异常。

所以,我的意思是,该示例是如何工作的,我的意思是控制器和 jsp 在不使用 @ComponentScan 的情况下正确处理和响应?从不同的角度来看,为什么@ComponentScan 会阻止@Bean 在我的项目中被初始化?

我的 WebApplicationInitializer

0 投票
1 回答
539 浏览

java - Can I use @ComponentScan and @Autowired with BasicDataSource without declare bean for BasicDataSource class in XML?

I'm trying to integrate hibernate with spring, and I asked-just to know if that possible or not-, can I use @Autowired and @Componentscan to do inject the BasicDataSource class?

0 投票
1 回答
2015 浏览

spring - 范围在等级环境中

我读过了:

多组件扫描

Spring MVC 中的 ApplicationContext 和 WebApplicationContext 有什么区别?

如果 <context:component-scan /> 在应用程序上下文而不是调度程序上下文中,@RequestMapping 注释不起作用(稍后会详细介绍)

和其他几个,但这些都没有回答这个问题:

<context:component-scan.../>当 Spring MVC 应用程序的 ROOT 上下文中存在时,为什么范围是有限的?

我的理解是,它会导致扫描指定包中的所有类,并实例化任何使用其原型@Component或其任何子原型(@Repository@Service)的 bean @Controller

鉴于:

applicationContext.xml(根上下文)

main-servlet.xml(servlet 上下文)

com/myproject/web/MainController.java

Spring 文档声明在根上下文中实例化的任何 bean 都是共享的,并且可用于各个 servlet 应用程序上下文。因此,根上下文中的两个<context:...>声明应该导致在 servlet 上下文中可见的 bean。但情况似乎并非如此。我需要在 servlet 上下文中<context:component-scan.../>重复。<context:property-placeholder.../>

在 servlet 上下文中省略 会<context:component-scan.../>导致

表示@Controller未解决。

使用未处理的属性引用省略注释中的<context:property-placeholder.../>结果@Value,在我的情况下会导致一些断开的链接。

由于这两个<context:.../>指令都会导致 bean 实例化,我很困惑为什么 bean 在子上下文中不可见,这与文档直接矛盾。此外,没有两个component-scan语句会导致控制器 bean 被实例化两次吗?

关于@RequestMapping 注释不起作用,如果 <context:component-scan /> 在应用程序上下文而不是调度程序上下文中,我确实<mvc:annotation-driven />在我的应用程序上下文中,并且这里的答案没有解释为什么component-scan需要两个语句。

除非我完全理解它是如何工作的并且可以预测当我调整某些东西时它会如何表现,否则我对使用“魔法”感到非常不舒服。所以“两个地方都加就继续”的“解决方案”是不能接受的。

0 投票
0 回答
219 浏览

java - SpringBootApplication 注解启动时间开销

我想创建一个新的 Spring Boot Web 应用程序。

我的结构应该如下:

我可以走两条路:

  1. 使用注释 MyApplication@SpringBootApplication并让它找到控制器、JPA 存储库等。
  2. 使用@EnableWebMvc,@EnableJpaRepostories以此类推,以@ComponentScan(basePackages=...)明确指出不同组件类型的基本包。

我很乐意使用第一种方法,但担心启动应用程序需要更多时间(如果应用程序代码库显着增长),因为 Spring 会扫描所有内容而不是特定包。但无论如何,它至少应该读取所​​有这些文件以找到 bean。

所以问题是:

Spring(Boot)是否足够聪明,只扫描一次 bean 的所有子包,或者它会增加开销以使其保留默认配置?

0 投票
2 回答
22896 浏览

java - 扩展 AbstractAnnotationConfigDispatcherServletInitializer 时的 getServletConfigClasses() 与 getRootConfigClasses()

扩展时getServletConfigClasses()vs 有什么区别。从今天早上开始,我一直在阅读很多资料,但我还没有对这些差异有任何清楚的了解:getRootConfigClasses()AbstractAnnotationConfigDispatcherServletInitializer

请看这两种配置:

1)。

指的ConServlet.class

2)。

WebConfig.class指的是

我看到ConServletWebConfig(或多或少)都在做同样的事情,比如初始化视图:

但为什么 :

  • ConServlet返回getRootConfigClasses()
  • WebConfig返回时getServletConfigClasses()

我阅读了文档

getRootConfigClasses ()getServletConfigClasses() 都适用于

指定要提供给.. 的 @Configuration 和/或 @Component 类(它们的区别)

  • 根应用程序上下文getRootConfigClasses()
  • 调度程序 servlet 应用程序上下文 getServletConfigClasses()

但是为什么ConServletWebConfig 做同样的事情(比如初始化视图),也许是我误解了它。实际上是根上下文和调度程序 servlet(我知道这个)简单的术语/示例

谢谢!