问题标签 [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 投票
1 回答
442 浏览

java - 想要过滤扫描的 jar 以进行 Spring 组件扫描

我正在尝试优化大型 Spring 4 Tomcat 应用程序。启动时间大约是 2 分钟,我想知道是否有办法排除某些 jar 文件被扫描?例如,我不需要扫描 commons-lang b/c Spring 并不关心这一点,但是由于您在 applicationContext.xml 中基于 context:component-scan/base-package 定义扫描,所以我不太关心了解我该怎么做。有任何想法吗?也许对资源模式属性做点什么?

0 投票
1 回答
781 浏览

java - 从 SpringBoot 的 ComponentScan 中排除类

我有两个类,我想在运行时只使用一个类(取决于我是在服务器上运行测试还是在服务器上执行应用程序(本地或其他)),并从 Spring 的组件扫描中排除另一个类。

这是我在测试时要使用的第一堂课:

这是在生产或本地执行期间使用的第二类:

HibernateUtil这是一个仅包含openSession()方法声明的接口。

我想HibernateUtilForH2在测试时使用 DI 注入并HibernateUtilForMySql用于在本地服务器上进行生产或执行。我怎么做?

我试过使用@TestComponent@ConditionalOnWebApplication但似乎都不起作用。我需要一个与 GitLab 的 CI/CD 设置兼容的解决方案,以便部署可以顺利且无忧。

0 投票
2 回答
6750 浏览

spring-boot - 具有依赖关系且没有 @ComponentScan 的 Spring Boot 自动配置

Spring boot 提供@ComponentScan查找要扫描的包。

我正在建立一个图书馆,@RestControllers里面有package com.mylib.controller. 在不同的包中还有其他带有构造型注释的类。

因此,如果有人正在使用com.myapp 基础包开发 SpringBoot 应用程序。他在他的应用程序中使用了我的库。他需要提到@ComponentScan("com.mylib")发现库的刻板印象组件。

有没有办法在不包括库包的情况下扫描组件@ComponentScan

由于spring-boot-starter-actuator仅通过依赖关系公开其端点,而无需定义@ComponentScan. 或任何被扫描的默认包,无论应用程序基础包如何。

0 投票
0 回答
448 浏览

java - 为配置文件指定自动装配候选人的最佳方式

在我的一些接口的 Spring Boot 应用程序中,我有几个实现(通常是“主要实现”和“本地测试的实现”),我使用不同的配置文件。我知道告诉 spring 使用特定实现的几个选项。

  1. @Profile/添加@Conditional到用@Component. 优点:容易。缺点:我不喜欢关于配置文件的信息分散在组件中的事实。
  2. 从实现中删除注释并在特定于配置文件( )@Component中实例化组件。优点:需要更多代码。缺点。所有配置文件特定的组件都位于一个位置。@Configuration@Bean SomeService() { return new DefaultSomeService(); }
  3. 排除(通过@Component在实现中@ComponentScan添加显式自定义注释@IgnoreComponentScan以防止歧义)并在特定于配置文件的@Configuration 中实例化组件。接近第二个选项,但使组件更加清晰(我们可以保留@Repository/@Service注释)

还有其他选择吗?哪种方式更合适?

0 投票
2 回答
3512 浏览

spring-boot - 向 SpringBootTest 添加配置类会中断组件扫描

我正在尝试禁用真正的 Mongo 连接并在测试中用 Fongo 模拟替换它。

这是我的测试课:

除非我尝试添加更改此行的配置文件,否则它工作正常:

对此:

配置类本身:

然后应用程序找不到 bean 并抛出下一个异常:

如何修复它并正确应用其他配置?

0 投票
1 回答
492 浏览

java - 为什么我的配置类没有用@Configurable 和@ComponentScan 注释两次没有初始化bean?

我读过

“@Configuration 类是 @Components 的事实也意味着,如果您在包含它们的包上启用了组件扫描,则会自动拾取您的 @Configuration 类。这可能会产生有意和无意的后果。如果您的 @Configuration 类启用组件扫描它所在的同一个包,你的 bean 可能会被实例化两次,这不好。”(Williams 346)

我不确定作者试图传达什么,因为没有任何具体的例子,经过一天的思考,我能尝试产生这个问题的最接近的代码是下面的代码,这对我来说可以在没有初始化任何 bean 的情况下正常工作(无论是通过@Bean 标签)还是通过@Component 标签,两次。

请注意,bean X 的目标代码是相同的,而且每个方法都只调用一次,包括构造函数。

以及运行 main 的结果

但是,我收到一条错误消息,似乎是 spring 使这个问题已由 spring 修复

它说

实际上,如果我在 spring 3.2.9.RELEASE 上尝试这个,它会与

所以我猜,我有作者试图传达的正确想法,但如果我没有,如果有人能向我展示一个可能导致威廉姆斯评论的问题浮出水面的演示程序,我将不胜感激。

0 投票
1 回答
240 浏览

spring - 组件扫描与配置的 Spring 文档

我已经搜索了这个问题的答案,但我的搜索巫毒一定有点不对劲。

在工作中,我注意到有人偏好使用 Spring Configuration 和 @Beans 来初始化我们的 Java 对象。虽然这种方法没有问题,但我认为切换到@Component(使用 ComponentScan)可能

  1. 稍微简化代码
  2. 让我们更符合良好的 Spring 实践

但是,考虑到这一点,我很难证明为什么我认为这是一个好的做法。我对 @Bean 的理解是它对于初始化遗留或非 Springified 代码很有用。这可能导致我将 @Component 视为一种好习惯。

@Bean 方法的一个优点是它集中了初始化。与不那么直观的@Component 相比,这更容易理解。

Spring 是否有关于每种方法的优缺点的良好文档?或者该主题的最佳实践指南?

0 投票
2 回答
5877 浏览

java - @SpringBootApplication - ComponentScan 在新的 Eclipse 项目中不能按预期工作

我最近开始使用 Eclipse(从 IntelliJ Idea 转移),但是无论我开始编写什么新的 SpringBoot 应用程序,我总是遇到这个问题。我的主类上的 @SpringBootApplication 没有按预期工作。我应该能够在不添加 @ComponentScann 注释的情况下逃脱(我知道它会使其工作),但这篇文章的目的是找出原始失败的路由原因。我已经知道解决方法。我的应用程序总是出现以下错误消息:

所以,这是我正在使用的代码

主类:

仓库界面:

最后,我想@Autowire EventRepository 的服务:

据我了解,我的主类(在 com.ge.workplacelogger 包中)上的 @SpringBootApplication 将在所有子包上作为 @ComponentScan 工作。我所有的服务、存储库、模型都在包 com.ge.workplacelogger 的子包中,所以我真的不知道出了什么问题。这可能是一个荒谬的问题,但它与 Eclipse 有什么关系吗?以前从未遇到过 IntelliJ 的任何问题。

非常感谢您提前回答!

编辑:这也是我的评估实体。

编辑2:Build.gradle:

编辑 3:这是无法在此处插入的超长报告的结尾 :) debug = true

编辑 4:Application.properties

0 投票
3 回答
5391 浏览

spring - Spring条件组件扫描配置

我有一个配置类,它根据一个非常简单的条件(检查 application.properties 中的属性值)注册 bean。配置类和条件如下:

除了在这个配置类中注册的 bean 之外,我还有组件扫描,它扫描其他组件。当条件不满足时,我希望配置类中定义的 bean 不会被注册(碰巧是这种情况),但我也希望其他用@Component(or @Repository, @Service, etc..) 注释的类和与不注册的标记接口在同一文件夹中DBConfigComponents.class,这不会发生。被扫描的 Bean 总是被注册,无论条件是否满足。

当我把它@Conditional(DatabaseConfigurationCondition.class)放在每个带@Component注释的类上时,它工作正常,但我不想把它单独放在每个类上。

有什么建议吗?

0 投票
2 回答
126 浏览

spring-boot - 排除微服务的某些组件

我是一只新蜜蜂,正在使用微服务(Spring Boot,Spring Cloud),我试图在另一个微服务中使用资源文件。为此,我需要通过 ComponentScan 在另一个模块中扫描该模块。

就像我有一个管理模块一样,我需要在主模块中自动连接主资源。所以我使用:

我在AdminApplication文件中使用了它。现在它还在 Admin 中显示了我不想要的主模块的控制器。我谷歌它并申请:

但它仍然在管理模块中显示这个主模块控制器。如何实际排除这个?请帮我。