Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.companyname.enterpriseteam.demo.anonymizer.DAnonymizer' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}下面是一个模拟但逻辑上准确的代码表示形式
配置包
…
import org.companyname.enterpriseteam.demo.anonymizer.DAnonymizer;
import org.companyname.entuserfilter.externals.adminusersearch.AdminSearchUserRecordsAnonymizer;
…
@Configuration
public class AdminUserSearchAnonymizationConfiguration {
@Bean
public AdminSearchUserRecordsAnonymizer
adminSearchUserRecordsAnonymizer(final DAnonymizer dAnonymizer) {
return new adminSearchUserRecordsAnonymizerImpl(dAnonymizer);
}
}我在不同的包中创建的新接口
…
Some imports
…
public interface AdminSearchUserRecordsAnonymizer {
List<StoredUserRecord> anonymizeAdminSearchUserRecordsIfNeeded(
final List<StoredUserRecord> storedUserRecords,
final String orgId,
@Nullable final Long requestUserId);
}接口的实现
…
Some imports
…
public class AdminSearchUserRecordsAnonymizerImpl
implements AdminSearchUserRecordsAnonymizer {
private final DAnonymizer dAnonymizer;
public AdminSearchUserRecordsAnonymizerImpl(final DAnonymizer dAnonymizer) {
this.dAnonymizer = dAnonymizer;
}
@Override
public List<StoredUserRecord> anonymizeAdminSearchUserRecordsIfNeeded(
final List<StoredUserRecord> storedUserRecords,
final String orgId,
@Nullable final Long requestUserId) {
if (!DConstants.COMPANY_ORG_ID.equals(orgId) || requestUserId == null) {
// System.out.println("NO ANONYMIZATION" + storedUserRecords);
return storedUserRecords;
}
// System.out.println("ANONYMIZATION TO BE DONE ON USER RECORDS LIST" + storedUserRecords);
return storedUserRecords.stream()
.map(entry -> anonymizeUserRecordIfNeeded(entry, orgId, requestUserId))
.collect(Collectors.toList());
}
private StoredUserRecord anonymizeUserRecordIfNeeded(
final StoredUserRecord storedUserRecord, final String orgId, final Long requestUserId) {
final var anonymizedStoredUserRecord =
dAnonymizer.getAnonymizedUserInfoForOrg(
orgId, storedUserRecord.userId().get(), requestUserId);
return anonymizedStoredUserRecord
.map(
anon ->
new StoredUserRecord(
storedUserRecord.userId(),
anon.email(),
storedUserRecord.externalId(),
anon.name(),
.orElse(storedUserRecord);
}
}执行依赖项注入的类的构造函数。
…
Some imports
…
public class AdminViewElasticSearchManager implements AdminViewManager {
private final someObject1;
private final someObject2;
private final someObject3;
private final someObject4;
private final AdminSearchUserRecordsAnonymizer
adminSearchUserRecordsAnonymizer;
public AdminViewElasticSearchManager(
someClass1 someObject1,
someClass2 someObject2,
someClass3 someObject3,
someClass4 someObject4,
AdminSearchUserRecordsAnonymizer
adminSearchUserRecordsAnonymizer
) {
this.elasticSearchReader = elasticSearchReader;
this.someObject1 = someObject1;
this.someObject2 = someObject2;
this.someObject3 = someObject3;
this.someObject4 = someObject4;
this.adminSearchUserRecordsAnonymizer =
adminSearchUserRecordsAnonymizer;
}我在上面这个类中的某个地方使用我的新实现的方法
@Override
public UserRecordsWithPagination searchWithFilterParams(filterParams, pageRequest, requestUser) {
…
Some code
…
storedUserRecords =
this.adminSearchUserRecordsAnonymizer.anonymizeAdminSearchUserRecordsIfNeeded(
storedUserRecords, filterParams.orgId, requestUser);
…
More code
…
}由于依赖注入问题,许多测试都失败了,因为它,我无法正确地进行测试。这个特殊的测试也不像它应该的那样断言,这意味着我的新类没有将正确的列表返回给它的调用者。我想知道它是否与依赖关系没有被正确注入?
…
var filterParams =
FilterParams.newBuilder()
.setOrganizationId(UserRecordFixtures.MEMBER_USER_RECORD.organizationId())
.setSearchNameOrEmails(List.of("johndoe"))
.build();
var pageRequest =
PageRequest.newBuilder()
.setStart(Int64Value.of(0))
.setLimit(Int64Value.of(1))
.build();
var result = this.manager.queryByFilterParams(filterParams, pageRequest, null);
System.out.println("THIS IS MY RESULT: " + result);
Assertions.assertEquals(1, result.userRecords().size());
…发布于 2022-06-27 14:56:25
在配置类中定义DAnonymizer bean,如下所示
@Configuration
public class DAnonymizerConfig {
@Bean
public DAnonymizer dAnonymizer() {
return new DAnonymizer();//considering DAnonymizer has default constructor
}
}https://stackoverflow.com/questions/72747557
复制相似问题