class ReactiveOAuth2ServerAutoConfiguration {


        @Bean
        @ConditionalOnMissingBean
        public AccessTokenManager accessTokenManager(ReactiveRedisOperations<Object, Object> redis,
                                                     UserTokenManager tokenManager,
                                                     OAuth2Properties properties) {
            @SuppressWarnings("all")
            RedisAccessTokenManager manager = new RedisAccessTokenManager((ReactiveRedisOperations) redis, tokenManager);
            manager.setTokenExpireIn((int) properties.getTokenExpireIn().getSeconds());
            manager.setRefreshExpireIn((int) properties.getRefreshTokenIn().getSeconds());
            return manager;
        }

        @Bean
        @ConditionalOnMissingBean
        public ClientCredentialGranter clientCredentialGranter(ReactiveAuthenticationManager authenticationManager,
                                                               AccessTokenManager accessTokenManager,
                                                               ApplicationEventPublisher eventPublisher) {
            return new DefaultClientCredentialGranter(authenticationManager, accessTokenManager,eventPublisher);
        }

        @Bean
        @ConditionalOnMissingBean
        public AuthorizationCodeGranter authorizationCodeGranter(AccessTokenManager tokenManager,
                                                                 ApplicationEventPublisher eventPublisher,
                                                                 ReactiveRedisConnectionFactory redisConnectionFactory) {
            return new DefaultAuthorizationCodeGranter(tokenManager,eventPublisher, redisConnectionFactory);
        }

        @Bean
        @ConditionalOnMissingBean
        public RefreshTokenGranter refreshTokenGranter(AccessTokenManager tokenManager) {
            return new DefaultRefreshTokenGranter(tokenManager);
        }

        @Bean
        @ConditionalOnMissingBean
        public OAuth2GrantService oAuth2GrantService(ObjectProvider<AuthorizationCodeGranter> codeProvider,
                                                     ObjectProvider<ClientCredentialGranter> credentialProvider,
                                                     ObjectProvider<RefreshTokenGranter> refreshProvider) {<FILL_FUNCTION_BODY>}

        @Bean
        @ConditionalOnMissingBean
        @ConditionalOnBean(OAuth2ClientManager.class)
        public OAuth2AuthorizeController oAuth2AuthorizeController(OAuth2GrantService grantService,
                                                                   OAuth2ClientManager clientManager) {
            return new OAuth2AuthorizeController(grantService, clientManager);
        }

    }

            CompositeOAuth2GrantService grantService = new CompositeOAuth2GrantService();
            grantService.setAuthorizationCodeGranter(codeProvider.getIfAvailable());
            grantService.setClientCredentialGranter(credentialProvider.getIfAvailable());
            grantService.setRefreshTokenGranter(refreshProvider.getIfAvailable());

            return grantService;
        
<no_super_class>