当我使用@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
BeanDefinitionRegistryPostProcessor beanPostProcessor(AppService
appService),则在AppServiceImpl类中AppDao依赖项将为null
}
}
//// 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);
}
}
我想要的是何时我的beanPostProcessor()
执行后,我希望所有依赖的bean都应该实例化,即
@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
最佳答案
之所以是null
,是因为该@Configuration
类还定义了一个BeanDefinitionRegistryPostProcessor
,该AppService
强制上下文非常早地创建该bean。
因为您使用的是字段注入,所以上下文必须解析public static
bean,但是还不能解析,因为必须先应用后处理器。
您的配置看起来非常复杂,因此您可能需要简化一下:
将低层基础结构配置与主配置分开
始终将此类后处理器定义为@Bean
方法,以便上下文可以调用方法而不必先构造类。