当我使用@autowire在配置中注入依赖项时 将其归类为null,请参见下面的代码。
/messages
如果我将使用appService进行调用,则此处为null BeanDefinitionRegistryPostProcessor beanPostProcessor(AppService
appService),那么在AppServiceImpl类中,AppDao依赖项将为空
@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();
我想要的是什么时候我的beanPostProcessor() 执行后,我希望所有依赖的bean都应实例化,即
}
}
//// Service
@Service
public class AppServiceImpl implements AppService{
@Autowired
AppDao ds;
@Override
public List<A> getDatabaseConfiguration() {
return ds.getDbDetails(); // here ds is null
}
}
//dao
@Repository
public class AppDaoImpl implements AppDao {
@Qualifier("nameParamJdbcTemplate")
@Autowired
public NamedParameterJdbcTemplate nameParamJdbcTemplate;
@Override
public List<A> getDbDetails() {
return nameParamJdbcTemplate.query(SELECT_QUERY, new DataSourceMapper()); // nameParamJdbcTemplate is null
}
// datasource config
@Configuration
public class DataSourceBuilderConfig {
@Bean(name = "dbSource")
@ConfigurationProperties(prefix = "datasource")
@Primary
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "nameParamJdbcTemplate")
@DependsOn("dbSource")
@Autowired
public NamedParameterJdbcTemplate jdbcTemplate1(@Qualifier("dbSource") DataSource dbSource) {
return new NamedParameterJdbcTemplate(dbSource);
}
}
答案 0 :(得分:1)
它是null
,因为此@Configuration
类还定义了一个BeanDefinitionRegistryPostProcessor
,它强制上下文非常早地创建该bean。
因为您使用的是字段注入,所以上下文必须解析AppService
bean,但还不能解决,因为必须先应用后处理器。
您的配置看起来非常复杂,因此您可能需要简化一下:
public static
方法,以便上下文可以调用@Bean
方法而不必先构造类。