@autowired аннотация для класса обслуживания не работает в весенней загрузке класса @configure - PullRequest
0 голосов
/ 28 декабря 2018

когда я использую @autowire для ввода своих зависимостей в классе конфигурации, который дает мне значение NULL, используйте приведенный ниже код.

@Configuration
public class DataSourceConfig {



    @Autowired
    AppService   appService;

    @Bean
    public BeanDefinitionRegistryPostProcessor beanPostProcessor() {
        return new BeanDefinitionRegistryPostProcessor() {

            public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {

            }

            public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanRegistry) throws BeansException {

                createBeans(beanRegistry);

            }

        };
    }

    private void createBeans(BeanDefinitionRegistry beanRegistry,DataSourceConfigService ds) {


        appService.getDbDetails();

appService здесь равен NULL, еслия буду называть его таким образомвыполняется, я хочу, чтобы все мои зависимые бины были созданы, например

 @Autowired
  AppService appService;  

@Autowired
AppDao ds;    
@Qualifier("nameParamJdbcTemplate")
@Autowired
public NamedParameterJdbcTemplate nameParamJdbcTemplate; 

I am new to spring so any help or working examples would be great. Thanks

1 Ответ

0 голосов
/ 28 декабря 2018

Это null, потому что этот класс @Configuration также определяет BeanDefinitionRegistryPostProcessor, который вынуждает контекст создавать этот компонент очень рано.

Поскольку вы используете внедрение поля, контекст должен разрешать бин AppService, но пока не может, потому что постпроцессор должен быть применен первым.

Ваша конфигурация выглядит очень сложнойтак что вы можете немного упростить это:

  • Отделить низкоуровневую конфигурацию инфраструктуры от основной конфигурации
  • Всегда определяйте такой постпроцессор как метод public static, чтобы контекст мог вызыватьметод @Bean без предварительного конструирования класса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...