Определен Бин, но не может получить к нему доступ - PullRequest
0 голосов
/ 10 марта 2019

Я немного запутался с определениями Бина в Spring. Чтобы возобновить, мне нужен бин Keycloak для обслуживания.

Я создаю его на RootConfig.java так:

@Bean
    public Keycloak keycloak(){
        Keycloak keycloak = KeycloakBuilder
                .builder()
                .serverUrl(KEYCLOAK_AUTH_SERVER_URL)
                .realm(KEYCLOAK_REALM)
                .clientId(KEYCLOAK_RESOURCE)
                .clientSecret(KEYCLOAK_CREDENTIALS_SECRET)
                .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
                .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(KEYCLOAK_REST_CLIENT_POOL_SIZE).build())
                .build();
        return keycloak;
    }

Тогда на моих сервисах я хочу использовать это следующим образом:

@Autowired
    private Keycloak keycloak;

Но я получил это исключение при запуске моего проекта:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'applicationManagementServiceImpl' defined in VFS resource ["/service/ApplicationManagementServiceImpl.class\"]: Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
    Caused by: java.lang.ExceptionInInitializerError
    Caused by: java.lang.IllegalArgumentException: Keycloak instance required"}}

Если кто-нибудь может сказать мне, почему я не могу получить доступ к этому бобу? Не должно быть объявлено, когда я запускаю свой сервер?

RootConfig:

@Configuration
@ComponentScan(basePackages = {
        "xxx.config",
        "xxx.controller",
        "xxx.service",})
@PropertySource("classpath:application.properties")
@Import(SecurityConfig.class)
public class RootConfig {


    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Bean
    public MessageSource messageSource()
    {

    }

    @Bean
    public LocaleResolver localeResolver() {

    }

    @Bean(name = "multipartResolver")
    public CommonsMultipartResolver multipartResolver() {

    }

    @Bean
    public Keycloak keycloak(){
        Keycloak keycloak = KeycloakBuilder
                .builder()
                .serverUrl(KEYCLOAK_AUTH_SERVER_URL)
                .realm(KEYCLOAK_REALM)
                .clientId(KEYCLOAK_RESOURCE)
                .clientSecret(KEYCLOAK_CREDENTIALS_SECRET)
                .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
                .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(KEYCLOAK_REST_CLIENT_POOL_SIZE).build())
                .build();
        return keycloak;
    }
}

Мое обслуживание:

@Service
public class ApplicationManagementServiceImpl implements ApplicationManagementService{


    //Variable def

    @Autowired
    private Keycloak keycloak;

    private PaymentServiceProviderClientRepresentationRepository repository = new PaymentServiceProviderClientRepresentationRepositoryImpl(keycloak, KEYCLOAK_REALM_TARGET);


    @Override
    public void createApp(String appName, String registrationId, String clientRootUrl, String baseUrl, String clientRedirectUri) {

        //myStuff

    }

    public Keycloak getKeycloak() {
        return keycloak;
    }

    public void setKeycloak(Keycloak keycloak) {
        this.keycloak = keycloak;
    }
}

Спасибо

...