@Bean
        @ConditionalOnMissingBean(name = "aggregatingAttributeRepository")
        @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
        public PersonAttributeDao aggregatingAttributeRepository(
            @Qualifier("attributeRepositoryAttributeMerger")
            final AttributeMerger attributeRepositoryAttributeMerger,
            final CasConfigurationProperties casProperties,
            @Qualifier(PersonDirectoryAttributeRepositoryPlan.BEAN_NAME)
            final PersonDirectoryAttributeRepositoryPlan personDirectoryAttributeRepositoryPlan) {
            val aggregate = getAggregateAttributeRepository(casProperties);
            aggregate.setAttributeMerger(attributeRepositoryAttributeMerger);

            val list = personDirectoryAttributeRepositoryPlan.getAttributeRepositories();
            aggregate.setPersonAttributeDaos(list);

            val properties = casProperties.getAuthn().getAttributeRepository();
            aggregate.setRequireAll(properties.getCore().isRequireAllRepositorySources());
            if (list.isEmpty()) {
                LOGGER.debug("No attribute repository sources are available/defined to merge together.");
            } else if (LOGGER.isDebugEnabled()) {
                val names = list
                    .stream()
                    .map(p -> Arrays.toString(p.getId()))
                    .collect(Collectors.joining(","));
                LOGGER.debug("Configured attribute repository sources to merge together: [{}]", names);
            }

            val recoverExceptions = properties.getCore().isRecoverExceptions();
            aggregate.setRecoverExceptions(recoverExceptions);
            LOGGER.trace("Configured attribute repository to recover from exceptions: [{}]", recoverExceptions);

            return aggregate;
        }
This is {@link CasPersonDirectoryConfiguration}.

@author Misagh Moayyed
@since 5.0.0
support/cas-server-support-person-directory/src/main/java/org/apereo/cas/config/CasPersonDirectoryConfiguration.java