经过大量的工作和研究,我注意到在组件扫描方面,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" })我已经看到很多有关组件扫描的问题很久没有得到回答,因此我想添加这些细节,因为这可能会在将来对某人有所帮助。
嗯…



