我有一个要在组件扫描时排除的类。我正在使用下面的代码来做到这一点,但这似乎没有用,尽管一切似乎都正确
@ComponentScan(basePackages = { "common", "adapter", "admin"}, excludeFilters = { @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ServiceImpl.class) })
实际上,我想在我的其余api逻辑中使用实现“ Service”接口的“
ServiceImpl”类,并在进行api的集成测试时希望排除这种实现并加载模拟的实现。但这似乎没有发生,即使使用上面的内容我也收到以下错误
No qualifying bean of type [admin.Service] is defined: expected single matching bean but found 2: ServiceMockImpl,ServiceImpl
我花了太多时间在此上,但没有任何效果。
任何帮助表示赞赏。
经过大量的工作和研究,我注意到在组件扫描方面,Spring的行为并不奇怪。
伪像是这样的:
ServiceImpl
是实现Service
接口的实际实现类。 ServiceMockImpl
是实现Service
接口的模拟植入类。
我想调整组件扫描,使其仅加载,ServiceMockImpl
但不会加载ServiceImpl
。
我必须@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ServiceImpl.class)
在@ComponentScan
测试配置类的中添加,以从组件扫描中排除该特定类。但是即使进行了上述更改,两个类都已加载,并且测试失败。
经过大量的工作和研究,我发现ServiceImpl
由于另一个类正在被加载并且其中包含@ComponentScan
所有软件包而正在加载。因此,我添加了如下代码以Application
从组件扫描中排除该类@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Application.class)
。
之后,它按预期工作。
如下代码
@ComponentScan(
excludeFilters = {
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = OAuthCacheServiceImpl.class),
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Application.class)
},
basePackages = {
"common", "adapter", "admin"
}
)
我已经看到很多有关组件扫描的问题很久没有得到回答,因此我想添加这些细节,因为这可能会在将来对某人有所帮助。
嗯…
我有一些 在量角器中,我们搜索并找到元素,检查文本是否符合我们的期望,然后对该元素调用。测试在Chrome中运行良好,但在IE中就好像没有点击发生一样。破坏了测试。 IE 11是否支持点击
问题内容: 我注意到less.js在firefox中工作,但在Chrome中不工作,或者是因为我出错了吗? 即使我尝试在Chrome中仍然无法使用,我在某个地方犯了错误吗? 问题答案: 通过您提供的链接: 如果您使用的是Chrome,Less.js浏览器脚本当前将无法使用,并且由于已知的Chrome问题,网页的路径以“file:///”开头。
问题内容: 不仅如此,其他代码也有相同的问题。只是不能使用ImageView。 环境:macOS,IntelliJ 造成原因:java.lang.IllegalArgumentException:无效的URL:无效的URL或找不到资源 问题答案: 该图像构造函数接受一个url作为参数。如果您未在其中添加协议,则它将假定该项目来自类路径。显然,不会出现在您的类路径中。 要从文件而不是类路径中读取,请
问题内容: 当我迅速运行此代码时,我不知道为什么应用程序会在“ alertView.show()”部分显示一个断点而终止,请有人帮帮我。 问题答案: 从Xcode 6.0 UIAlertView类: 不推荐使用UIAlertView。改用UIAlertController和UIAlertControllerStyleAlert的preferredStyle。 在Swift(iOS 8和OS X 1
问题内容: 我已经动态创建了一个复选框。我曾经在单击复选框时调用过一个函数,该函数在Google Chrome和Firefox中有效,但 在Internet Explorer 8中不起作用 。这是我的代码: 是我的事件处理程序。 问题答案: 尝试: 更新: 对于IE9之前的InternetExplorer版本,应使用attachEvent方法将指定的侦听器注册到调用它的EventTarget上,对
问题内容: 我在Linux GCC中使用了fflush(),但是没有用。该功能还有其他选择吗?这是我的代码: 我得到的输出是: 然后程序结束。就这样。我可以在Linux中做什么?有替代功能吗? 问题答案: 不要使用fflush,而是使用以下函数: 取决于实现,但是此功能始终有效。在C中,使用是不当做法。